📄 rfc2296.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:x1982212(x1982212)
译文发布时间:2001-11-24
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。
Network Working Group K. Holtman
Request for Comments: 2296 TUE
Category: Experimental A. Mutz
Hewlett-Packard
March 1998
HTTP远程变量选择算法—RVSA/1.0
(RFC2296——HTTP Remote Variant Selection Algorithm -- RVSA/1.0)
本备忘录的状态
本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和
建议以得到改进。请参考最新版的“Internet正式协议标准” (STD1)来获得本协议的标准
化程度和状态。本备忘录的发布不受任何限制。
版权声明
Copyright (C) The Internet Society (2001).
摘要
HTTP允许web站点作者在单一URL下放置相同信息的多个版本。透明内容协商是用来
在存取URL时自动选择最佳变量的一种机制。一个远程变量选择算法能用来加速透明协商进
程。这篇文档定义了1.0版本的远程变量选择算法。
目录
1.介绍 2
2.术语和符号 3
3.远程变量选择算法 3
3.1输入 3
3.2输出 3
3.3计算总体品质因数 3
3.4确定及不确定的品质值 4
3.5确定结果 5
4.算法的使用 5
4.1使用品质因数为参数划分等级 5
4.2.1折叠接收报头元素 6
4.2.2忽略接收报头 7
4.2.3动态长度请求 7
4.3本地和远程算法的区别 8
4.3避免主要区别 8
4.3.2解决细微区别 8
5.0安全和隐私考虑 8
6.致谢 9
7.参考文献 9
8.作者地址 9
9.完整版权说明 9
1.介绍
HTTP允许web站点作者在单一URL下放置相同信息的多个版本。透明内容协商[2]是
用来在存取URL时自动选择最好版本的一种机制。远程变量选择算法能被HTTP服务器用来
为一个协商用户代理选择一个最好的变量。通过减少一个请求-响应来回,远程变量选择算
法的使用能够加速透明协商进程。
这篇文档定义了1.0版本的远程变量选择算法。此算法计算请求的接收报头里是否包含
足够的信息来进行一个选择,并且在包含足够信息的情况下,决定选择哪一个变量。
2.术语和符号
这篇说明使用HTTP透明内容协商说明[2]中的术语和符号。
3.远程变量选择算法
这篇文档定义了1.0版本的远程变量选择算法。为了实现这个定义,服务器可能运行任
何产生相同结果的算法。
注意:根据[2],服务器也可以返回一个列表响应,而不运行一个远程算法。因此,任
何时候,服务器只要可以运行一个远程算法,它就可以运行该算法的部分实现,只要部分实
现在不能计算真实结果时也返回列表响应。
3.1输入
算法通常为一个特别的请求而运行,这个特别的请求请求一特殊的透明可协商资源。它
将以下信息作为输入。
1. 资源的变量列表,正如资源的备用报头所示。
2. (部分)关于这个特殊请求的用户代理的功能和参数信息,和请求的接收报头里给
出的一样。
如果在备用报头里存在一个回撤变量描述{“fallback.html”},这个算法必须将它解释为下
面的变量描述{“fallback.html”0.000001}。这个极低的品质因数确保了只有当所有其它
选择都用尽时回撤变量才会被选中。
3.2输出
作为它的输出,远程变量选择算法接着将产生合适的动作。存在两种可能:
选择响应
接收报头包含足够的信息来为可能的用户代理作出选择,而且在一个选择响应中必
须返回一个最佳变量。
列表响应
接收报头没有包含足够的信息为可能的用户代理作出选择。必须返回一个列表响
应,这样就允许用户代理自己作出选择。
3.3计算总体品质因数
远程变量选择算法的第一步,是计算列表中的个体变量的总体品质因数。
一个变量的总体品质Q的值为
Q=round5(qs*qt*qc*ql*qf)
这里round5是一个函数,它将一个浮点值四舍五入直到小数点后有5个十进制数,参
数qs,qt,qc,ql和qf按如下方式决定。
qs 是变量描述中的源品质因数。
qt 如果变量描述中没有类型属性,或者在请求中没有接收报头,媒体类型品质因数
就是1。否则,它就是接收报头在类型属性中给媒体类型赋的值。
注意:如果一个类型不能和接收报头中的任何元素匹配,接收报头就把这种类型的
品质因数赋为0。
qc 如果在变量描述中没有字符集属性,或在请求中没有接收字符集报头,字符集
品质因数就是1。否则,字符集品质因数就是接收字符集报头在字符集属性中给字符集赋
的值。
ql 如果在变量描述中没有语言属性,或在请求中没有接收语言报头,语言品质因
数就是1。否则,语言品质因数就是接收语言报头在语言属性中给列出的任何一种语言赋
予的所有的品质因数中的最高值。
qf 如果在变量描述中没有特征属性,或在请求中没有接收特征报头,特征品质因
数就是1。否则,它就是特征属性的品质退化因数,参见[2]的6.4节。
例如,如果一个变量列表包含变量描述{“paper.html.en"0.7 {type
text/html}{language fr}}并且请求包含接收报头
Accept:text/html:q=1.0,*/*=0.8
Accept-Language:en;q=1.0,fr;q=0.5
远程变量选择算法会按下面方式为变量计算一个总体品质:
{"paper.html.fr" 0.7 {type text/html} {language fr}}
| | |
| | |
V V V
round5 ( 0.7 * 1.0 * 0.5 ) = 0.35000
按上面的接收报头,下面完整的变量列表
{"paper.html.en" 0.9 {type text/html} {language en}},
{"paper.html.fr" 0.7 {type text/html} {language fr}},
{"paper.ps.en" 1.0 {type application/postscript} {language en}}
会产生下面的计算式:
round5 ( qs * qt * qc * ql * qf ) = Q
--- --- --- --- --- -------
paper.html.en: 0.9 * 1.0 * 1.0 * 1.0 * 1.0 = 0.90000
paper.html.fr: 0.7 * 1.0 * 1.0 * 0.5 * 1.0 = 0.35000
paper.ps.en: 1.0 * 0.8 * 1.0 * 1.0 * 1.0 = 0.80000
3.4确定及不确定的品质值
一个计算好的总体品质值既可能是确定的,也可能是不确定的。如果计算时没有使用
任何接收报头中的‘*’通配符,并且不需要一个特殊接收报头不存在,那么它就是确定的。
相反,它就是不确定的。
比如,在这节里,paper.html.en和paper.html.fr的品质值是确定的,paper.ps.en
的品质值是不确定的,因为application/postscript类型和范围*/*匹配。
确定性可以定义地更正规,如下所示。一个总体品质值Q是确定的,如果在请求信息
按照如下方式改变之后还能计算出相同的品质值Q的话:
1.如果一个接收报头,接收字符集报头,接收语言报头,或接收特征报头从请求中丢失了,向
这个报头中加上一个空字段。
2.从接收报头中删除任何包含一个通配符‘*’的媒体域。从接收字符集报头,接收语言
报头,和接收特征报头中删除所有通配符‘*’。
这里是另外一个例子,变量{“blah.html”1{language en-gb}{features blebber [x
y]}},如果它的接收报头是
Accept-Language: en-gb, fr
Accept-Features: blebber, x, !y, *和
Accept-Language: en, fr
Accept-Features: blebber, x, *
它的总体品质因数是1并且是确定的
如果接收报头是
Accept-language: en-gb, fr
Accept-Features: blebber, !y, *和
Accept-Language: fr, *
Accept-Features: blebber, x, !y, *
总体品质因数还是1,但是是不确定的,
3.5确定结果
最优变量,由远程变量选择算法决定的,是具有最高总体品质值的变量,或者当有许
多变量具有此相同的最高品质值时,是列表中的第一个具此值的变量。
当下列所有条件都满足时,远程变量选择算法的最终结果是选择响应:
a. 最优变量的总体品质值大于0。
b. 最优变量的总体品质值是一个确定的品质值。
c. 变量资源和可协商资源相邻。这个条件的存在确保了一个对选择响应的安全相关限
制得到满足。参见[2]的10.2和10.4节。
在所有其它情况下,最终结果都是列表响应。
上面对确定性的要求以一种戏剧性的方式影响对接收报头的解释。比如,它使得远程算
法将报头
Accept: image/gif;q=0.9, */*;q=1.0解释成
‘我接收品质值为0.9的image/gif, 并把其它媒体类型的品质类型赋为1.0。如果此信息
不够我自己作出选择,就不作选择而是发送变量列表 '。
没有以上要求的话,解释就会是
‘我接收品质值为0.9的image/gif,和品质值为1.0的所有其它媒体类型 '。
4.算法的使用
这一节讨论用户代理怎样以一种最佳方式使用远程算法。这节是非标准化的,把它包括
进来只是出于提供信息的目的。
4.1使用品质因数为参数划分等级
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -