Apache Версия 2.0 Сервера HTTP
Apacheские поддержки удовлетворяют переговоры как описано в спецификации HTTP/1.1. Это может выбрать лучшее представление ресурса, основанного на поставляемом браузером предпочтении виду средств рекламы, языкам, набору символов и зашифровыванию. Это также осуществляет несколько особенностей, чтобы дать более интеллектуальную обработку запросов от браузеров, которые посылают неполную информацию переговоров.
довольные переговоры обеспечиваются
mod_negotiation
модуль, который собран в по умолчанию.
ресурс может быть доступным в нескольких различных представлениях. Например, это могло бы быть доступно на различных языках или различных видах средств рекламы, или комбинации. Один способ выбирать самый соответствующий выбор состоит в том, чтобы дать пользователю страницу индекса, и позволить им выбирать. Однако это часто возможно для сервера выбрать автоматически. Это работает, потому что браузеры могут послать, как часть каждого запроса, информация о том, какие представления они предпочитают. Например, браузер мог указать, что это хотело бы видеть информацию на французском языке, если возможно, еще английский язык сделает. Браузеры указывают их предпочтение ударами головой в запросе. Чтобы просить только французские представления, браузер послал бы
Accept-Language: fr
отметить, что это предпочтение будет только применено, когда есть выбор представлений, и они изменяются языком.
как пример более сложного запроса, этот браузер формировался, чтобы принять французский и английский язык, но предпочесть французский язык, и принимать различные виды средств рекламы, предпочитая HTML по простому тексту или другим типам текста, и предпочитая ДЖИФА или JPEG по другим видам средств рекламы, но также и позволяя любой другой вид средств рекламы как последнее прибежище:
Accept-Language: fr; q=1.0, en; q=0.5
Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
Apache поддерживает 'сервер, который везут' довольные переговоры, как определено в спецификации HTTP/1.1. Это полностью поддерживает
Accept
,
Accept-Language
,
Accept-Charset
и
Accept-Encoding
удары головой запроса. Апач также поддерживает 'прозрачные' довольные переговоры, которые являются экспериментальным протоколом переговоров, определенным в RFC 2295 и RFC 2296. Это не предлагает поддержку 'переговорам особенности' как определено в этих RFCs.
A ресурс является концептуальным юридическим лицом, идентифицированным ТУРАМИ (RFC 2396). Сервер HTTP как Apache обеспечивает доступ к представления из ресурса (ов) в пределах его namespace, с каждым представлением в форме последовательности байтов с определенным видом средств рекламы, набором символов, зашифровыванием, и т.д. Каждый ресурс может быть связан с нолем, один, или больше чем одним представлением в любое данное время. Если многократные представления доступны, ресурс упоминается договорный и каждое из его представлений называют a вариант . пути, по которым изменяются варианты для договорного ресурса, называют измерения из переговоров.
чтобы договариваться о ресурсе, серверу нужно дать информацию о каждом из вариантов. Это сделано в одном из двух путей:
*.var
файл), который называет файлы, содержащие варианты явно, или
карта типа - документ, который связан с названным тренером
type-map
(или, для назад-совместимости со старшими Apacheскими конфигурациями, типом MIME
application/x-type-map
). Отметьте, что, чтобы использовать эту особенность, Вы должны установить тренера в конфигурации, которая определяет суффикс файла как
type-map
; это лучше всего сделано с
AddHandler type-map .var
в файле конфигурации сервера.
файлы карты типа должны иметь то же самое название как ресурс, который они описывают, и имеют вход для каждого доступного варианта; эти записи состоят из смежных линий удара головой HTTP-формата. Записи для различных вариантов отделены чистыми линиями. Чистые линии незаконны в пределах входа. Обычно начать файл карты со входа для объединенного юридического лица в целом (хотя это не требуется, и если подарок будет игнорироваться). Файл карты примера показывают ниже. Этот файл назвали бы
foo.var
, поскольку это описывает названный ресурс
foo
.
URI: foo
URI: foo.en.html
Content-type: text/html
Content-language: en
URI: foo.fr.de.html
Content-type: text/html;charset=iso-8859-2
Content-language: fr, de
отметить также, что typemap файл будет иметь приоритет по расширению имени файла, даже когда Мультипредставления идут. Если варианты имеют различные исходные качества, которые могут быть обозначены "qs" параметром к виду средств рекламы, как на этой картине (доступный как JPEG, ДЖИФ, или искусство ASCII):
URI: foo
URI: foo.jpeg
Content-type: image/jpeg; qs=0.8
URI: foo.gif
Content-type: image/gif; qs=0.5
URI: foo.txt
Content-type: text/plain; qs=0.01
ценности qs могут измениться по диапазону 0.000 к 1.000. Отметьте, что любой вариант с ценностью qs 0.000 никогда не будет выбираться. Вариантам без 'qs' ценности параметра дают qs фактор 1.0. qs параметр указывает относительное 'качество' этого варианта по сравнению с другими доступными вариантами, независимыми от способностей клиента. Например, файл JPEG имеет обычно более высокое исходное качество чем файл ASCII, если это пытается представить фотографию. Однако, если бы представляемый ресурс - оригинальное искусство ASCII, то представление ASCII имело бы более высокое исходное качество чем представление JPEG. Ценность qs является поэтому определенной для данного варианта в зависимости от природы ресурса, который это представляет.
полный список признанных ударов головой доступен в mod_negotation typemap документация.
MultiViews
является в-справочник выбором, означая, что это может быть установлено с
Options
директива в пределах a
<Directory>
,
<Location>
или
<Files>
секция в
httpd.conf
, или (если
AllowOverride
должным образом установлен) в
.htaccess
файлы. Отметьте это
Options All
не устанавливает
MultiViews
; Вы должны спросить это по имени.
эффект
MultiViews
следующие: если сервер получает запрос о
/some/dir/foo
, если
/some/dir
имеет
MultiViews
позволенный, и
/some/dir/foo
делает
нет
существовать, тогда сервер читает справочник, ищущий файлы, названные foo. *, и эффективно фальсифицирует карту типа, которая называет все те файлы, назначая их теми же самыми видами средств рекламы и довольными зашифровываниями, которые это имело бы, если клиент спросил одного из них по имени. Это тогда выбирает лучшее состязание к требованиям клиента.
MultiViews
может также обратиться к поискам файла, названного
DirectoryIndex
директива, если сервер пробует внести справочник в указатель. Если файлы конфигурации определяют
DirectoryIndex index
тогда сервер вынесет решение между
index.html
и
index.html3
если оба присутствуют. Если ни один не присутствует, и
index.cgi
есть ли, сервер будет управлять этим.
если один из файлов нашел, читая справочник не признавали расширение
mod_mime
чтобы определять его Charset, Довольный тип, Язык, или Зашифровывание, тогда результат зависит от урегулирования
MultiViewsMatch
директива. Эта директива определяет, могут ли тренеры, фильтры, и другие типы расширения участвовать на переговорах Мультипредставлений.
после того, как Apache получил список вариантов для данного ресурса, или от файла карты типа или от имен файла в справочнике, это призывает один из двух методов, чтобы выбрать 'лучший' вариант, чтобы возвратиться, если любой. Не необходимо знать любые из деталей того, как переговоры фактически имеют место, чтобы использовать довольные особенности переговоров Апача. Однако остальная часть этого документа объясняет методы, используемые для заинтересованных.
есть два метода переговоров:
измерение | примечания |
---|---|
Вид средств рекламы |
браузер указывает предпочтение с
Accept
область удара головой. Каждый пункт может иметь связанный качественный фактор. Различное описание может также иметь качественный фактор ("qs" параметр).
|
язык |
браузер указывает предпочтение с
Accept-Language
область удара головой. Каждый пункт может иметь качественный фактор. Варианты не могут быть связаны ни с одним, одним или больше чем одним языком.
|
зашифровывание |
браузер указывает предпочтение с
Accept-Encoding
область удара головой. Каждый пункт может иметь качественный фактор.
|
Charset |
браузер указывает предпочтение с
Accept-Charset
область удара головой. Каждый пункт может иметь качественный фактор. Варианты могут указать charset как параметр вида средств рекламы.
|
Apache может использовать следующий алгоритм, чтобы выбрать 'лучший' вариант (если любой), чтобы возвратиться к браузеру. Этот алгоритм не далее конфигурируем. Это работает следующим образом:
Accept
удар головой с фактором качества-источника для этого вида средств рекламы вариантов, и выбора варианты с самой высокой ценностью.
Accept-Language
удар головой (если подарок), или иначе заказ языков в
LanguagePriority
директива (если подарок).
Accept-Charset
линия удара головой. Charset ISO-8859-1 приемлем если явно не исключено. Варианты с a
text/*
вид средств рекламы, но не явно связанный со специфическим charset, как предполагают, находится в ISO-8859-1.
Vary
собирается указать измерения переговоров (браузеры, и тайники могут использовать эту информацию, пряча про запас ресурс). Конец.
Vary
удар головой, чтобы указать измерения разницы.
Apache иногда изменяет качественные ценности от того, что ожидалось бы строгой интерпретацией Apacheского алгоритма переговоров выше. Это должно получить лучшее следствие алгоритма для браузеров, которые не посылают полную или точную информацию. Некоторые из самых популярных браузеров посылают
Accept
информация удара головой, которая иначе привела бы к выбору неправильного варианта во многих случаях. Если браузер пошлет полную и правильную информацию, то эти скрипки не будут применены.
Accept:
удар головой запроса указывает предпочтение видам средств рекламы. Это может также включить виды средств рекламы 'группового символа', типа "изображения / *" или "*/*", где * соответствует любой веренице. Так запрос, включая:
Accept: image/*, */*
указал бы, что любой тип, начинающий "изображение/" является приемлемым, как - любой другой тип. Некоторые браузеры обычно посылают групповые символы в дополнение к явным типам, с которыми они могут обращаться. Например:
Accept: text/html, text/plain, image/gif, image/jpeg, */*
намерение этого состоит в том, чтобы указать, что явно перечисленные типы предпочтены, но если различное представление доступно, который в порядке также. Используя явные качественные ценности, то, что действительно хочет браузер, - кое-что как:
Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
явные типы не имеют никакого качественного фактора, таким образом они неплатеж к предпочтению 1.0 (самое высокое). Групповому символу */* дают низкое предпочтение 0.01, таким образом другие типы будут только возвращены, если никакой вариант не будет соответствовать явно перечисленному типу.
если
Accept:
удар головой содержит
нет
q факторы вообще, Apache заставляет ценность q "*/*", если подарок, к 0.01 подражать желательному поведению. Это также устанавливает ценность q групповых символов формата, "печатают / *" к 0.02 (таким образом они предпочтены по спичкам против "*/*". Если любой вид средств рекламы на
Accept:
удар головой содержит q фактор, эти специальные ценности
нет
прикладной, так просит от браузеров, которые посылают явную информацию, чтобы начаться с работы как ожидается.
новый в Apacheе 2.0, некоторые исключения были добавлены к алгоритму переговоров, чтобы позволить изящное отступление, когда языковые переговоры не в состоянии найти состязание.
когда клиент просит страницу на вашем сервере, но сервер не может найти единственную страницу, которая соответствует
Accept-language
посланный браузером, сервер не возвратит или "Никакие Приемлемые Различные" или "Многократные Выборы" ответ клиенту. Чтобы избегать этих ошибочных сообщений, возможно формировать Apacheа, чтобы игнорировать
Accept-language
в этих случаях и обеспечивают документ, который явно не соответствует запросу клиента.
ForceLanguagePriority
директива может использоваться, чтобы отвергнуть один или оба из этих ошибочных сообщений и заменить суждением серверов в форме
LanguagePriority
директива.
сервер также попытается соответствовать подмножествам языка, когда никакое другое состязание не может быть найдено. Например, если клиент просит документы с языком
en-GB
для британского варианта английского языка, сервер обычно не позволяется по стандарту HTTP/1.1 соответствовать этому против документа, который отмечен как просто
en
. (отметьте, что это - почти конечно ошибка конфигурации включить
en-GB
и нет
en
в
Accept-Language
удар головой, так как очень маловероятно, что читатель понимает британский вариант английского языка, но не понимает английский язык вообще. К сожалению, много текущих клиентов имеют конфигурации по умолчанию, которые напоминают это.) Однако, если никакое другое языковое состязание не возможно и сервер собирается не возвращать "Никакие Приемлемые Варианты" ошибка или отступление к
LanguagePriority
, сервер будет игнорировать спецификацию подмножества и состязание
en-GB
против
en
документы. Неявно, Apache добавит родительский язык к приемлемому языковому списку клиента с очень низкой качественной ценностью. Но примечание, что, если клиент просит "В-ГИГАБИТ; q=0.9, франк; q=0.8", и сервер определяли документы "в" и "франк", тогда документ "франка", будет возвращен. Это необходимо поддержать согласие со спецификацией HTTP/1.1 и работать эффективно с должным образом формируемыми клиентами.
чтобы поддерживать передовые методы (, типа печенья или специальных ДОРОЖЕК URL), чтобы определить привилегированный язык пользователя, начиная с Apacheа 2.0.47
mod_negotiation
признает
environment variable
prefer-language
. если это существует и содержит соответствующий языковой признак,
mod_negotiation
будет пробовать выбрать соответствующий вариант. Если нет такого варианта, нормальный процесс переговоров применяется.
SetEnvIf Cookie "language=en" prefer-language=en
SetEnvIf Cookie "language=fr" prefer-language=fr
Apache расширяет прозрачный довольный протокол переговоров (RFC 2295) следующим образом. Новое
{encoding ..}
элемент используется в различных списках, чтобы маркировать варианты, которые являются доступными с определенным довольным зашифровыванием только. Выполнение алгоритма RVSA/1.0 (RFC 2296) расширено, чтобы признать закодированные варианты в списке, и использовать их как варианты кандидата всякий раз, когда их зашифровывания приемлемы согласно
Accept-Encoding
удар головой запроса. Выполнение RVSA/1.0 не делает круглые вычисленные качественные факторы к 5 десятичным местам перед выбором лучшего варианта.
если Вы используете языковые переговоры, Вы можете выбрать между различными соглашениями обозначения, потому что файлы могут иметь больше чем одно расширение, и заказ расширений является обычно несоответствующим (см. mod_mime документация для деталей).
типичный файл имеет расширение ТИПА ПАНТОМИМЫ (
например.
,
html
), возможно расширение зашифровывания (
например.
,
gz
), и конечно языковое расширение (
например.
,
en
), когда мы имеем различные языковые варианты этого файла.
примеры:
здесь еще некоторые примеры имен файла вместе с действительным и недействительным осуществляют гиперссылку:
имя файла | действительная гиперссылка | недействительная гиперссылка |
---|---|---|
foo.html.en |
foo
foo.html |
- |
foo.en.html | foo | foo.html |
foo.html.en.gz |
foo
foo.html |
foo.gz
foo.html.gz |
foo.en.html.gz | foo |
foo.html
foo.html.gz foo.gz |
foo.gz.html.en |
foo
foo.gz foo.gz.html |
foo.html |
foo.html.gz.en |
foo
foo.html foo.html.gz |
foo.gz |
Cмотря на стол выше, Вы заметите, что всегда возможно использовать название без любых расширений в гиперссылке (
например.
,
foo
). Преимущество состоит в том, что Вы можете скрыть фактический тип документа rsp. файл и можете изменить это позже,
например.
, от
html
к
shtml
или
cgi
не изменяя никаких ссылок гиперссылки.
если Вы хотите продолжить использовать ТИП ПАНТОМИМЫ в вашем, осуществляет гиперссылку (
например.
foo.html
) языковое расширение (включая расширение зашифровывания, если есть один) должно быть справа расширения ТИПА ПАНТОМИМЫ (
например.
,
foo.html.en
).
когда тайник хранит представление, это связывает это с URL запроса. Следующий раз, когда URL требуют, тайник, может использовать сохраненное представление. Но, если ресурс является договорным в сервере, это могло бы привести только к первому требуемому припрятавшему про запас варианту, и последующие хиты тайника могли бы возвратить неправильный ответ. Чтобы предотвращать это, Apache обычно отмечает все ответы, которые возвращены после довольных переговоров как non-cacheable клиентами HTTP/1.0. Апач также поддерживает особенности протокола HTTP/1.1, чтобы позволить прятать про запас из договорных ответов.
для запросов, которые прибывают от послушного клиента HTTP/1.0 (или браузер или тайник), директива
CacheNegotiatedDocs
может использоваться, чтобы позволить прятать про запас из ответов, которые были подчинены переговорам. Эту директиву можно дать в сервере config или действительном хозяине, и не берет никаких аргументов. Это не имеет никакого эффекта на запросы от клиентов HTTP/1.1.
за дополнительной информацией о довольных переговорах, см. Алана Дж. Флейвлл Language Negotiation Notes . но примечание, что этот документ не может быть обновлен, чтобы включить изменения в Apacheе 2.0.