描述: | 提供内容协商 |
---|---|
状态: | 基础 |
模块标识符: | 谈判模块 |
源文件: | mod_negotiation.c |
内容协商,或更准确地说是内容选择,是从多个可用文档之一中选择与客户端功能最匹配的文档。有两种实现。
type-map
),显式列出包含变体的文件。Multiviews
Options
),其中服务器执行隐式文件名模式匹配,然后从结果中进行选择。类型映射的格式类似于RFC822邮件头。它包含用空行分隔的文档描述,其中以井号('#')开头的行被视为注释。文档描述由几个标题记录组成;如果连续行以空格开头,则记录可以在多行上继续。前导空格将被删除,行将被连接。标头记录由关键字名组成,关键字名总是以冒号结尾,后跟一个值。标头名称和值之间以及值的标记之间允许使用空格。允许的标题为:
Content-Encoding:
AddEncoding
指令定义的编码。这通常包括x-compress
compress'd文件和x-gzip
gzip'd文件的编码。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----
例如,考虑一个名为的资源,该资源
document.html
具有英语,法语和德语。对于这些文件被称为
document.html.en
,document.html.fr
和
document.html.de
分别。类型映射文件将称为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
所有这四个文件应放置在同一目录中,并且该.var
文件应通过指令与type-map
处理程序关联
AddHandler
:
AddHandler type-map .var
document.html.var
在此目录中的请求将导致选择与用户的Accept-Language
请求标头中指定的语言首选项最匹配的变体。
如果Multiviews
启用,并且MultiviewsMatch
设置为“ handlers”或“ any”,则请求
document.html
将发现document.html.var
并继续与显式类型映射进行协商。
其他配置指令(例如Alias
可用于映射document.html
到)
document.html.var
。
通过启用了多视图搜索Multiviews
Options
。如果服务器收到一个请求/some/dir/foo
,并
/some/dir/foo
确实不存在,则服务器会寻找一个名为所有文件的目录
foo.*
,并有效假货了这名所有这些文件类型映射,赋予它们不同的介质类型和内容编码那就得客户是否要求提供姓名之一。然后,它选择最符合客户要求的匹配项,并返回该文档。
该MultiviewsMatch
指令配置Apache在选择文件时是否考虑未分配内容协商元信息的文件。
描述: | 允许内容协商文档由代理服务器缓存 |
---|---|
句法: | CacheNegotiatedDocs On|Off |
默认: | CacheNegotiatedDocs Off |
内容: | 服务器配置,虚拟主机 |
状态: | 基础 |
模块: | mod_negotiation |
如果设置,此指令允许代理服务器缓存内容协商的文档。这可能意味着这些代理后面的客户可以检索与其功能最不匹配的文档版本,但这将使缓存效率更高。
该指令仅适用于来自HTTP / 1.0浏览器的请求。HTTP / 1.1对协商的文档的缓存提供了更好的控制,并且此指令对HTTP / 1.1请求的响应无效。
描述: | 如果找不到单个可接受的文档,应采取的措施 |
---|---|
句法: | ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback] |
默认: | ForceLanguagePriority Prefer |
内容: | 服务器配置,虚拟主机,目录,.htaccess |
覆写: | 文件信息 |
状态: | 基础 |
模块: | mod_negotiation |
该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 |
覆写: | 文件信息 |
状态: | 基础 |
模块: | mod_negotiation |
该LanguagePriority
用于何处处理一个在Multiviews请求时,客户端没有偏好的情况下语言变体的优先级设置。MIME-lang的列表按优先级递减的顺序排列。
LanguagePriority en fr de
对于foo.html
,
foo.html.fr
和foo.html.de
都存在的请求,但浏览器未表达语言偏好,则将foo.html.fr
返回。
请注意,该指令仅在无法通过任何其他方式确定“最佳”语言或者该ForceLanguagePriority
指令不是时才有效None
。通常,客户端确定语言首选项,而不是服务器。