内容协商机制

思考:
国内访问某个网址是中文,国外访问就是英文,为什么在国外拿着自己的电脑访问谷歌也是中文呢?

内容协商机制
◆指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言,字符集,编码方式等作为判断的基准。
当浏览器的默认语言为英文或者中文,访问相同URI的Web页面时候,就返回对应的英文或中文的Web页面,这种机制称为内容协商(Content Negotiation)。

内容协商方式
◆客户端驱动
客户端发起请求,服务器发送可选项列表,客户端作出选择后在发送第二次请求。
优点:比较容易实现
缺点:增加了时延,至少要发送两次请求,第一次请求获取资源列表,第二次获取选择的副本。
◆服务器驱动(使用最广泛)
服务器检查客户端的请求头部集并决定提供哪个版本的页面。
优点:比客户端驱动的协商要快。HTTP提供了q机制(理解为权重),允许服务器近似匹配,还提供了vary首部供服务器告知下游的设备(如代理服务器)如何对请求估值。
缺点:首部集不匹配,服务器要做猜测
◆透明协商
某个中间设备(通常是缓存代理)代表客户端进行协商。
优点:免除了web服务器的协商开销,比客户端驱动的协商要快。
缺点:HTTP并没有提供相应的规范

服务器驱动内容协商请求首部集
◆Accept: 告知服务器发送何种媒体类型–要听音乐
◆Accept-Language:告知服务器发送何种语言–中文
◆Accept-Charset: 告知服务器发送何种字符集—unicode
◆Accept-Encoding:告知服务器采用何种编码----uft-8
内容协商首部集是由客户端发送给服务器用于交换偏好信息的,以便服务器可以从文档的不同版本中选择出最符合客户端偏好的那个来提供服务。

服务器用下面列出的实体首部集来匹配客户端的Accept首部集:
Accept首部    实体首部
Accept       Content-Type
Accept-Language Content-Language
Accept-Charset Content-Type
Accept-Encoding Content-Encoding

服务器驱动内容协商–近似匹配
假设客户端的Accept-Language指定的是西班牙语,但是服务端只有英语与法语版本,这个客户端希望在没有西班牙语的时候优先返回英语。这就意味着,我们需要一种HTTP机制更详细的描述偏好。这种机制就是质量值(q值)。示例如下:
Accept-Language: en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0
这个首部表示:用户最愿意接受荷兰语(nl),英文也行(en),就是不愿意接受法语(fr)或者土耳其语(tr);
q值的范围从0.0~1.0(1.0优先级最高);
国际化网站就会用到内容协商机制,支持客户想要的语言偏好

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章