Apache HTTP服务器 2.0版本
说明: | 提供内容协商的支持 |
---|---|
状态: | Base |
模块名: | negotiation_module |
源文件: | mod_negotiation.c |
内容协商,更准确的来说是内容选择,是一个从几个有效的文档中,选择一个最能匹配客户端性能的文档的过程。内容协商有两种实现方法。
type-map
处理器信息的文件)明确地列出各变种的文件名。Options
指令中的MultiViews
激活),即服务器执行一个隐含的文件名模式匹配,并在其结果中选择。类型表的格式有点类似于RFC822邮件头的格式。它包含以空行分格的文档描述,以井号('#')打头的行被当作是注释。一个文档描述包含几个标题记录,以空格开始的行将被认为是前一记录的延续,这样文档描述记录就可以包含多行。在处理器处理多行记录时,行与行被连接起来,打头的空格会被删除。一个标题记录包含一个关键字名,它总是在结尾的地方用一个冒号把它和紧跟其后的取值分隔开。在标题记录名与它的值之间以及取值的各个字元间可以插入空格。标题可以是:
Content-Encoding:
AddEncoding
指令定义的编码方式。它一般包含compress压缩文件的x-compress
编码和gzip文件的x-gzip
编码。在编码对照过程中,x-
前缀会被忽略。Content-Language:
en
表示英语。如果变体包含一种以上的语言,用逗号来分隔。Content-Length:
Content-Type:
name=value
这样的语法。一般参数包括:
level
text/html
来讲,缺省值是2,其它的缺省值为0。qs
Content-Type: image/jpeg; qs=0.8
URI:
Body:
Body:----xyz----
<html>
<body>
<p>Content of the page.</p>
</body>
</html>
----xyz----
MultiViews查询是由Options
指令的MultiViews
来激活的。如果服务器接收了一个对/some/dir/foo
的请求,而/some/dir/foo
不存在,则服务器会查找这个目录下所有的foo.*,有效地仿造一个指定所有这些文件的类型表,在这些文件类型中,假定客户可能请求的一个,把他们指定为这个类型的媒体类型及内容编码。最终选择其中最符合客户请求的文档,返回给客户。
说明: | 允许内容协商文档被代理服务器缓冲 |
---|---|
语法: | CacheNegotiatedDocs On|Off |
默认值: | CacheNegotiatedDocs Off |
上下文: | 服务器配置, 虚拟主机 |
状态: | Base |
模块: | mod_negotiation |
兼容性: | 在2.0中语法有变化。 |
设定后,指令允许内容协商文档被代理服务器缓冲。这可能意味着在代理服务器后面的客户端得到的文档并不是最符合他们情况的版本,但它能够使缓冲更有效。
本指令只对来自HTTP/1.0浏览器的请求有效。HTTP/1.1在对内容协商文档进行缓冲方面提供了更好的控制,本指令对于HTTP/1.1的应答没有任何效果。
在2.0版本以前,CacheNegotiatedDocs
指令不带任何参数;它会自己在目录存在的情况下开启。
说明: | 指定无法匹配单个文档的情况下所采取的动作 |
---|---|
语法: | ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback] |
默认值: | ForceLanguagePriority Prefer |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_negotiation |
兼容性: | 仅在2.0.30及以后的版本中支持 |
ForceLanguagePriority
指令使用LanguagePriority
指令的设置,在服务器无法返回单个匹配的文档的情况下,指定完成协商过程的方法。
ForceLanguagePriority Prefer
在有几个等价选择的情况下,使用
LanguagePriority
的设定以提供一个有效的结果,而不是返回HTTP结果300(多重选择)。如果给出了如下的指令,并且用户的Accept-Language
标题为en
和de
赋予了相同的品质系数.500
(相同的品质系数是允许的),那么第一个匹配的变体:en
被返回。
LanguagePriority en fr de
ForceLanguagePriority Prefer
ForceLanguagePriority Fallback
使用LanguagePriority
指令在无法找到合适的结果的情况下,指定一个有效的结果,而不是返回HTTP结果406(不可接受)。如果给出了如下的指令,并且用户的Accept-Language
标题只允许es
的返回结果,在这个变体没有找到的情况下,下表所列示的LanguagePriority
指令设定的第一个变体被返回。
LanguagePriority en fr de
ForceLanguagePriority Fallback
Prefer
和Fallback
这两个选项可以同时指定,这样在有一个以上有效变体的情况下,返回LanguagePriority
指令列表中第一个匹配的变体文档,而在没有一个变体能够匹配客户可接受的语言的情况下,返回第一个可用的变体文档。
说明: | 在客户没有指示对语言的偏好情况下,语言变体的优先级列表 |
---|---|
语法: | LanguagePriority MIME-lang [MIME-lang]
... |
上下文: | 服务器配置, 虚拟主机, 目录, .htaccess |
覆盖项: | FileInfo |
状态: | Base |
模块: | mod_negotiation |
在处理MultiViews请求时,LanguagePriority
指令在客户没有指示对语言的偏爱的情况下,设定语言变体的的优先级列表。这个MIME-lang列表是按优先级降序排列的。
LanguagePriority en fr de
对于一个foo.html
请求来讲,如果foo.html.fr
和foo.html.de
同时存在,并且浏览器没有表明对语言的偏爱,那么foo.html.fr
将被返回。
注意本指令只在根据其它信息无法决定最好的语言或者ForceLanguagePriority
指令不是None
时才有效。对正确实现的HTTP/1.1请求来讲,本指令没有任何作用。