Apache服务器采用如下算法选择变量返回给浏览器。使用者对这算法不能再做进一步配置。其具体算法如下:
(1)对每一个协商项目,检查相应的Accepe首部区域并为每个变量指定特征。针对一个选项,如果Accept首部显示某个变量是不可接受的,将他删除;若没有变量剩余,则转到第(4)步。
(2)用排除方式选择变量,按顺序执行以下测试,当变量只剩下一个时,将它作为虽佳匹配片执行第(3)步,否则继续执行如下测试:
①将Acccp首部中的特性系数乘以变量媒体类型的资源特性系数,选择具有值的变量。
②选择其自语言特性系数的变量。
③选择其自语言匹配的变量,按照Accept-Language首部的语言顺序或按照由LanguagePriority指令指定的语音顺序。
④选择具有“水平”媒体参数的变量(习惯给出text/html媒体类型的版本)
⑤选择具有媒体参数的变量,正如Accept-Cha下set标题行所给出的变量。如果没有明确规定,字符集Charsct IS0-8859-1作为缺省配置.如果不是明确属于某特殊字符集,带有text/*媒体类型的变量按照IS0-8859-1来对待。
⑥选择与IS0-8859-1字符集的媒体参数不相关的变量。如果没有,则选择所有的变量。
⑦选择具有编码的变量,这个过程主要先去能被用户代理商接受的具有编码的变量。当编码变量和无编码变量混杂时,只选无编码变量,如果所有变量都是同一类型(即要么都编码要么都没编码)那么选择所有变量。
⑧选择具有最小内容长度的变量。
⑨选择所剩变量中的一个。这个变量可以是类型映像文件中列出的个,也可以是当从目录中读取变量时,采用ASCII码的顺序个出现的文件所对应的变量。
(3)到日前为止,服务器按照这个算法已经选择了一个变量作为响应返回。HTTP响应首部Vary以说明所协商的项目(预览器和缓存器可以在调用本地缓存资源时使用这一信息)协商结束
(4)到这一步说明无变量可选,也是说服务器无法返回浏览器可以接受的变量,此时服务器返回一个HTML文件,它显示状态码406通知浏览嚣、没有找到合适的资源。
Apache服务器卉时会改变各种不同表示的权重值,这是为了使不能发送完整或正确信息的浏览器按照这个算法也可以得到一个较好的结果。即使是目前一些的浏览器当他们发送Accept首部信息时,在很多情况下也会导致选择错误的变量。如果浏览器发送的信息是完整而正确的,服务器不用再做这种修正工作了。
推荐阅读:服务器技术之Apache协商方法