mod_negotiation
描述: | 提供内容谈判 |
状态: | Base |
模块标识符: | negotiation_module |
源文件: | mod_negotiation.c |
摘要
内容协商,或者更准确地说是内容选择,是从几个可用文档中选择一个与 clients 功能最匹配的文档。这有两个_Implempleations。
- 类型 map(具有处理程序
type-map
的文件),它明确 lists 包含变体的 files。 - 多视图搜索(由
Multiviews
选项启用),其中服务器执行隐式文件名 pattern match,并从结果中进行选择。
键入 maps
类型 map 的格式类似于 RFC822 mail headers。它包含由空 lines 分隔的文档描述,lines 以哈希字符('#')开头,被视为 comments。文档描述由几个标题记录组成;如果延续 lines 以空格开头,则可以在多个 lines 上继续记录。将删除前导空格并连接 lines。标题 record 由关键字 name 组成,它始终以冒号结尾,后跟 value。标题 name 和 value 之间以及 value 的标记之间允许有空格。允许的 headers 是:
Content-Encoding:
文件的编码。 Apache 仅识别由 AddEncoding 指令定义的编码。这通常包括压缩 files 的编码 x-compress 和 gzip'd files 的 x-gzip。对于编码比较,忽略 x-前缀。Content-Language:
变体的 language(s),作为 Internet 标准语言标记(RFC 1766)。 example 是 en,意思是英语。如果变体包含多种语言,则用逗号分隔。Content-Length:
文件的长度,以字节为单位。如果此标头不存在,则使用文件的实际长度。Content-Type:
文档的 MIME 媒体类型,带有可选参数。参数通过 semi-colon 与媒体类型分离,语法为 name=value。 Common 参数包括:level integer 指定媒体类型的 version。对于 text/html,默认为 2,否则为 0. qs a floating-point 数字,其中 value 的范围为 0[21]到 1[22],表示此变体的相对“质量”与其他可用变体相比,与 client 无关能力。例如,如果 jpeg 文件试图表示照片,则它通常具有比 ascii 文件更高的源质量。但是,如果所表示的资源是 ascii art,那么 ascii 文件的源质量将高于 jpeg 文件。因此,所有 qs 值都特定于给定资源。 Example Content-Type:image/jpeg; qs=0.8URI:
uri 包含变体的文件(给定媒体类型,使用给定的内容编码编码)。这些被解释为相对于 map 文件的 URL;它们必须位于同一服务器上,并且如果要直接请求 client,则必须引用_clile 才能访问 files。Body:
资源的实际内容可以使用 Body 标头包含在 type-map 文件中。此标头必须包含 string,用于指定正文内容的分隔符。然后,类型 map 文件中的所有后续 lines 将被视为资源主体的一部分,直到找到分隔符 string。例如:Body:----xyz ----<html><body><p>页面内容。</p></body></html>----xyz ----
例如,考虑一个名为document.html
的资源,该资源有英语,法语和德语版本。其中每个的 files 分别称为document.html.en
,document.html.fr
和document.html.de
。类型 map 文件将被称为document.html.var
,并将包含以下内容:
URI: document.html Content-language: en Content-type: text/html URI: document.html.en Content-language: fr Content-type: text/html URI: document.html.fr Content-language: de Content-type: text/html URI: document.html.de
所有这四个 files 应放在同一目录中,.var
文件应与type-map
处理程序与AddHandler指令相关联:
AddHandler type-map .var
在此目录中对document.html.var
的请求将导致选择与用户的Accept-Language
请求标头中指定的语言首选项最匹配的变体。
如果启用Multiviews
,并且MultiviewsMatch设置为“处理程序”或“任何”,则对document.html
的请求将发现document.html.var
并且继续与显式类型 map 协商。
其他 configuration 指令(例如别号)可用于 map document.html
到document.html.var
。
多视图
Multiviews
选项启用了多视图搜索。如果服务器收到/some/dir/foo
的请求并且/some/dir/foo
不存在,那么服务器会读取目录,查找名为foo.*
的所有 files,并有效地伪造一个类型 map,它命名所有这些 files,为它们分配相同的媒体类型,并且 content-encodings 它会如果 client 通过 name 请求其中一个。然后,它会根据 client 的要求选择最佳的 match,然后返回该文档。
MultiviewsMatch指令配置 Apache 是否会在选择 files 时考虑没有为其分配内容__got的 files。
CacheNegotiatedDocs 指令
描述: | 允许代理服务器缓存 content-negotiated 文档 |
句法: | CacheNegotiatedDocs On\|Off |
默认: | CacheNegotiatedDocs Off |
Context: | server config,virtual host |
状态: | Base |
模块: | mod_negotiation |
如果设置,则此指令允许代理服务器缓存 content-negotiated 文档。这可能意味着这些代理背后的客户端可以检索不是最佳 match 的文档版本,但它会使缓存更有效。
该指令仅适用于来自 HTTP/1.0 浏览器的请求。 HTTP/1.1 可以更好地控制协商文档的缓存,该指令对 HTTP/1.1 请求的响应没有影响。
ForceLanguagePriority 指令
描述: | 如果找不到单个可接受的文档,则采取的措施 |
句法: | ForceLanguagePriority None\|Prefer\|Fallback[Prefer\|Fallback] |
默认: | ForceLanguagePriority Prefer |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_negotiation |
ForceLanguagePriority
指令使用给定的LanguagePriority来满足 negotiation,否则服务器不会_retret 返回单个匹配的文档。
ForceLanguagePriority Prefer
使用LanguagePriority
来提供一个有效结果,而不是在有几个同样有效的选择时返回 HTTP 结果 300(MULTIPLE CHOICES)。如果给出了下面的指令,并且用户的Accept-Language
标题分配en
和de
作为质量.500
(同样可接受),则将提供第一个匹配变体en
。
LanguagePriority en fr de ForceLanguagePriority Prefer
ForceLanguagePriority Fallback
使用LanguagePriority来提供有效结果,而不是返回 HTTP 结果 406(NOT ACCEPTABLE)。如果给出了以下指令,并且用户的Accept-Language
仅允许es
语言响应,但未找到此类变体,则将提供下面LanguagePriority列表中的第一个变体。
LanguagePriority en fr de ForceLanguagePriority Fallback
可以指定选项Prefer
和Fallback
,因此如果可以接受多个变体,则将提供来自LanguagePriority的第一个匹配变体,或者如果 none 变体与 client 可接受的语言列表匹配,则将提供第一个可用文档。
参见
- AddLanguage
LanguagePriority 指令
描述: | 对于 client 不表示首选项的情况,语言变体的优先级 |
句法: | LanguagePriority MIME-lang[MIME-lang]... |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_negotiation |
在处理 Multiviews 请求时,LanguagePriority
设置了 client 不表示首选项的语言变体的优先级。 MIME-lang 的列表在优先级递减的顺序中。
LanguagePriority en fr de
对于foo.html
的请求,其中foo.html.fr
和foo.html.de
都存在,但浏览器没有表达语言首选项,则返回foo.html.fr
。
请注意,如果无法通过任何其他方式确定“最佳”语言或ForceLanguagePriority指令不是None
,则此指令仅起作用。通常,client 确定语言首选项,而不是服务器。
参见
- AddLanguage