Apache 2.0手册中文版翻译项目 [本文译者: Daniel * ]

项目说明 | 项目进度 | 项目讨论区 | Apache手册中文版

 


mod_negotiation - Apache HTTP服务器
<-
Apache主站 > HTTP服务器 > 文档 > 2.0版本 > 模块索引

Apache模块 mod_negotiation

说明:提供内容协商的支持
状态:Base
模块名:negotiation_module
源文件:mod_negotiation.c

概要

内容协商,更准确的来说是内容选择,是一个从几个有效的文档中,选择一个最能匹配客户端性能的文档的过程。内容协商有两种实现方法。

指令索引

主题

参见

top

类型表

类型表的格式有点类似于RFC822邮件头的格式。它包含以空行分格的文档描述,以井号('#')打头的行被当作是注释。一个文档描述包含几个标题记录,以空格开始的行将被认为是前一记录的延续,这样文档描述记录就可以包含多行。在处理器处理多行记录时,行与行被连接起来,打头的空格会被删除。一个标题记录包含一个关键字名,它总是在结尾的地方用一个冒号把它和紧跟其后的取值分隔开。在标题记录名与它的值之间以及取值的各个字元间可以插入空格。标题可以是:

Content-Encoding:
文件的编码方式。Apache只支持用AddEncoding 指令定义的编码方式。它一般包含compress压缩文件的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.0到1.0之间的浮点数,它表示在不考虑客户端性能的情况下,一个变体相对于其它变体的“品质”。比如在表现一张照片时,jpeg文件通常比字符构图有较高的还原品质;而如果要表现的本来就是一个字符构图,那么当然Ascii文件会比jpeg文件有较高的还原品质。因此,所有的qs取值都是特定于某个资源的。

示例

Content-Type: image/jpeg; qs=0.8

URI:
文件的uri包含了(给定的媒体类型,指定的编码方式等)变量的信息。这些被解释为与映射文件相关的URL;它们必须在同一个服务器上(!)。如果它们被直接调用的话,它们所涉及的文件必须对用户来讲是可以访问的。
Body:
这是Apache 2.0新增的功能, 使用Body标题,资源的实际内容可以直接包含在类型表里。这个标题必须包含一个指明分隔符的字符串。这样在类型表文件中,接下来直到分隔字符串之前的所有内容,会被当作是资源实体。

示例:

Body:----xyz----
<html>
<body>
<p>Content of the page.</p>
</body>
</html>
----xyz----

top

MultiViews

MultiViews查询是由Options 指令的MultiViews来激活的。如果服务器接收了一个对/some/dir/foo的请求,而/some/dir/foo不存在,则服务器会查找这个目录下所有的foo.*,有效地仿造一个指定所有这些文件的类型表,在这些文件类型中,假定客户可能请求的一个,把他们指定为这个类型的媒体类型及内容编码。最终选择其中最符合客户请求的文档,返回给客户。

top

CacheNegotiatedDocs 指令

说明:允许内容协商文档被代理服务器缓冲
语法:CacheNegotiatedDocs On|Off
默认值:CacheNegotiatedDocs Off
上下文:服务器配置, 虚拟主机
状态:Base
模块:mod_negotiation
兼容性:在2.0中语法有变化。

设定后,指令允许内容协商文档被代理服务器缓冲。这可能意味着在代理服务器后面的客户端得到的文档并不是最符合他们情况的版本,但它能够使缓冲更有效。

本指令只对来自HTTP/1.0浏览器的请求有效。HTTP/1.1在对内容协商文档进行缓冲方面提供了更好的控制,本指令对于HTTP/1.1的应答没有任何效果。

在2.0版本以前,CacheNegotiatedDocs 指令不带任何参数;它会自己在目录存在的情况下开启。

top

ForceLanguagePriority 指令

说明:指定无法匹配单个文档的情况下所采取的动作
语法: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标题为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
状态:Base
模块:mod_negotiation

在处理MultiViews请求时,LanguagePriority 指令在客户没有指示对语言的偏爱的情况下,设定语言变体的的优先级列表。这个MIME-lang列表是按优先级降序排列的。

示例:

LanguagePriority en fr de

对于一个foo.html请求来讲,如果foo.html.frfoo.html.de 同时存在,并且浏览器没有表明对语言的偏爱,那么foo.html.fr 将被返回。

注意本指令只在根据其它信息无法决定最好的语言或者ForceLanguagePriority 指令不是None时才有效。对正确实现的HTTP/1.1请求来讲,本指令没有任何作用。

参见

 


项目维护者: kajaa [本文译者: Daniel * ]

项目说明 | 项目进度 | 项目讨论区 | Apache手册中文版