<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_negotiation

可用语言:  en  |  fr  |  ja 

描述提供 内容协商
状态基础
模块标识符negotiation_module
源文件mod_negotiation.c

摘要

内容协商,更准确地说应该是内容选择,是从多个可用文档中选择最符合客户端功能的文档。这有两种实现方式。

Support Apache!

主题

指令

Bugfix 检查清单

另请参阅

top

类型映射

类型映射的格式类似于 RFC822 邮件头。它包含由空行分隔的文档描述,以井号 ('#') 开头的行被视为注释。文档描述包含多个头记录;如果续行以空格开头,则记录可以跨多行继续。开头的空格将被删除,并将行连接起来。头记录包含一个关键字名称,它始终以冒号结尾,后面跟着一个值。在头名称和值之间以及值中的标记之间允许使用空格。允许的头包括

Content-Encoding
文件的编码。Apache 仅识别由 AddEncoding 指令定义的编码。这通常包括用于压缩文件的 x-compress 编码和用于 gzip 文件的 x-gzip 编码。x- 前缀在编码比较中被忽略。
Content-Language
变体的语言,作为互联网标准语言标签 (RFC 1766)。例如 en,表示英语。如果变体包含多种语言,则用逗号分隔。
Content-Length
文件的长度,以字节为单位。如果此头不存在,则使用文件的实际长度。
Content-Type
文档的 MIME 媒体类型,以及可选参数。参数用分号与媒体类型和彼此分隔,语法为 name=value。常见参数包括
level
指定媒体类型版本的整数。对于 text/html,默认值为 2,否则为 0。
qs
一个浮点数,值在 0[.000] 到 1[.000] 之间,表示此变体相对于其他可用变体的相对“质量”,与客户端的功能无关。例如,如果试图表示照片,则 jpeg 文件通常比 ascii 文件具有更高的源质量。但是,如果表示的资源是 ascii 艺术,则 ascii 文件将比 jpeg 文件具有更高的源质量。因此,所有 qs 值都特定于给定资源。

示例

Content-Type: image/jpeg; qs=0.8

URI
包含变体的文件的 uri(以给定的媒体类型编码,并以给定的内容编码编码)。这些被解释为相对于映射文件的 URL;它们必须位于同一服务器上,并且必须引用客户端如果直接请求将被授予访问权限的文件。
Body
资源的实际内容可以使用 Body 头包含在类型映射文件中。此头必须包含一个字符串,该字符串指定正文内容的分隔符。然后,类型映射文件中的所有后续行将被视为资源正文的一部分,直到找到分隔符字符串为止。

示例

Body:----xyz----
<html>
<body>
<p>页面的内容。</p>
</body>
</html>
----xyz----

例如,考虑一个名为 document.html 的资源,它以英语、法语和德语提供。每个文件分别称为 document.html.endocument.html.frdocument.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

top

多视图

多视图搜索由 Multiviews Options 启用。如果服务器收到对 /some/dir/foo 的请求,并且 /some/dir/foo *不存在*,则服务器会读取目录以查找所有名为 foo.* 的文件,并有效地伪造一个类型映射,该映射命名所有这些文件,并为它们分配与客户端请求其中一个文件时相同的媒体类型和内容编码。然后,它会选择最符合客户端要求的匹配项,并返回该文档。

MultiviewsMatch 指令配置 Apache 在选择文件时是否会考虑没有为其分配内容协商元信息的那些文件。

top

CacheNegotiatedDocs 指令

描述允许代理服务器缓存内容协商的文档
语法CacheNegotiatedDocs On|Off
默认CacheNegotiatedDocs Off
上下文服务器配置,虚拟主机
状态基础
模块mod_negotiation

如果设置,此指令允许代理服务器缓存内容协商的文档。这意味着那些代理后面的客户端可能会检索到与他们的功能不匹配的文档版本,但这将使缓存更有效。

此指令仅适用于来自 HTTP/1.0 浏览器的请求。HTTP/1.1 提供了对协商文档缓存的更好控制,并且此指令对对 HTTP/1.1 请求的响应没有影响。

top

ForceLanguagePriority 指令

描述如果找不到单个可接受的文档,则采取的操作
语法ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]
默认ForceLanguagePriority Prefer
上下文服务器配置,虚拟主机,目录,.htaccess
覆盖FileInfo
状态基础
模块mod_negotiation

ForceLanguagePriority 指令使用给定的 LanguagePriority 来满足协商,否则服务器可能无法返回单个匹配的文档。

ForceLanguagePriority Prefer 使用 LanguagePriority 来提供一个有效的结果,而不是在有多个同样有效的选择时返回 HTTP 结果 300(多个选择)。如果给出以下指令,并且用户的 Accept-Language 头将 ende 分别分配为质量 .500(同样可接受),则将提供第一个匹配的变体 en

LanguagePriority en fr de
ForceLanguagePriority Prefer

ForceLanguagePriority Fallback 使用 LanguagePriority 来提供一个有效的结果,而不是返回 HTTP 结果 406(不可接受)。如果给出以下指令,并且用户的 Accept-Language 仅允许 es 语言响应,但没有找到此类变体,则将提供来自以下 LanguagePriority 列表的第一个变体。

LanguagePriority en fr de
ForceLanguagePriority Fallback

可以指定 PreferFallback 两种选项,因此如果多个变体可接受,则将提供来自 LanguagePriority 的第一个匹配变体,或者如果没有任何变体与客户端的可接受语言列表匹配,则将提供第一个可用文档。

另请参阅

top

LanguagePriority 指令

描述在客户端没有表达偏好时,语言变体的优先级
语法LanguagePriority MIME-lang [MIME-lang] ...
上下文服务器配置,虚拟主机,目录,.htaccess
覆盖FileInfo
状态基础
模块mod_negotiation

LanguagePriority 设置在客户端没有表达偏好时,处理多视图请求时语言变体的优先级。MIME-lang 列表按优先级递减排序。

LanguagePriority en fr de

对于对 foo.html 的请求,其中 foo.html.frfoo.html.de 都存在,但浏览器没有表达语言偏好,则将返回 foo.html.fr

请注意,此指令仅在无法通过其他任何方式确定“最佳”语言或 ForceLanguagePriority 指令不是 None 时才有效。一般来说,客户端决定语言偏好,而不是服务器。

另请参阅

可用语言:  en  |  fr  |  ja 

top

注释

注意
这不是一个问答区。此处发布的评论应针对改进文档或服务器的建议,如果这些建议已被实施或被认为无效/与主题无关,则可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题,请咨询我们的 IRC 频道 #httpd(位于 Libera.chat)或发送到我们的 邮件列表