Apache HTTP Server 版本 2.4

| 描述 | 提供 内容协商 |
|---|---|
| 状态 | 基础 |
| 模块标识符 | negotiation_module |
| 源文件 | mod_negotiation.c |
内容协商,更准确地说应该是内容选择,是从多个可用文档中选择最符合客户端功能的文档。这有两种实现方式。
type-map 的文件),它显式列出包含变体的文件。Multiviews Options 启用),服务器会进行隐式文件名模式匹配,并从结果中进行选择。类型映射的格式类似于 RFC822 邮件头。它包含由空行分隔的文档描述,以井号 ('#') 开头的行被视为注释。文档描述包含多个头记录;如果续行以空格开头,则记录可以跨多行继续。开头的空格将被删除,并将行连接起来。头记录包含一个关键字名称,它始终以冒号结尾,后面跟着一个值。在头名称和值之间以及值中的标记之间允许使用空格。允许的头包括
Content-EncodingAddEncoding 指令定义的编码。这通常包括用于压缩文件的 x-compress 编码和用于 gzip 文件的 x-gzip 编码。x- 前缀在编码比较中被忽略。Content-Languageen,表示英语。如果变体包含多种语言,则用逗号分隔。Content-LengthContent-Typename=value。常见参数包括leveltext/html,默认值为 2,否则为 0。qsqs 值都特定于给定资源。Content-Type: image/jpeg; qs=0.8
URIBodyBody:----xyz----
<html>
<body>
<p>页面的内容。</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 文件应该使用 AddHandler 指令与 type-map 处理程序关联
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 |
| 覆盖 | FileInfo |
| 状态 | 基础 |
| 模块 | 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 |
| 覆盖 | FileInfo |
| 状态 | 基础 |
| 模块 | mod_negotiation |
LanguagePriority 设置在客户端没有表达偏好时,处理多视图请求时语言变体的优先级。MIME-lang 列表按优先级递减排序。
LanguagePriority en fr de
对于对 foo.html 的请求,其中 foo.html.fr 和 foo.html.de 都存在,但浏览器没有表达语言偏好,则将返回 foo.html.fr。
请注意,此指令仅在无法通过其他任何方式确定“最佳”语言或 ForceLanguagePriority 指令不是 None 时才有效。一般来说,客户端决定语言偏好,而不是服务器。