说明 | 提供内容协商支持 |
---|---|
状态 | 基本(B) |
模块名 | 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
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.*
文件,并有效地伪造一个说明这些 foo.*
文件的类型表,假定客户可能请求的一个,把他们指定为这个类型的媒体类型及内容编码。最终选择其中最符合客户请求的文档,返回给客户。
MultiViewsMatch
指令指示Apache在选择文件时是否考虑不包含内容协商元信息的文件。
说明 | 允许经过内容协商的文档被代理服务器缓存 |
---|---|
语法 | CacheNegotiatedDocs On|Off |
默认值 | CacheNegotiatedDocs Off |
作用域 | server config, virtual host |
状态 | 基本(B) |
模块 | mod_negotiation |
兼容性 | 从2.0版本起,语法有了变化 |
如果设置为"On",则允许内容协商文档被代理服务器缓存。这可能意味着在代理服务器后面的客户端得到的文档并不是最符合他们情况的版本,但它能够使缓存更有效。
本指令只对HTTP/1.0浏览器的请求有效。HTTP/1.1在对内容协商文档进行缓冲方面提供了更好的控制,本指令对于HTTP/1.1的应答没有效果。
在2.0版本以前,CacheNegotiatedDocs
指令不带任何参数;它会自己在目录存在的情况下开启。
说明 | 指定无法匹配单个文档的情况下所采取的动作 |
---|---|
语法 | ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback] |
默认值 | ForceLanguagePriority Prefer |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | FileInfo |
状态 | 基本(B) |
模块 | mod_negotiation |
兼容性 | 仅在 Apache 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] ... |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | FileInfo |
状态 | 基本(B) |
模块 | 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请求,本指令没有任何作用。