《HTTP权威指南》每章的知识点总结
变体:单一的一个url,根据用户的不同需要,服务器发送不同版本的响应给用户,我们把这种服务器发送的不同版本的响应称为变体。例如一个网页有英语和中文版本,通过内容协商的方法实现精确发送那个版本的给客户端,这两个版本的网页就是变体。
转码:有时根据客户端设备的不同,需要将资源转换成响应的格式的文件以让客户端设备更好的处理资源,这种类似的操作就称作转码。
1、客户端驱动实现方式:客户端发起请求,服务器返回资源可用版本的列表,这种方式实现起来简单,但同时有个问题就是至少需要发送两次请求才能得到自己喜欢的响应(第一次获取列表,第二次才是得到资源),显然会造成时延、浪费带宽。
2、服务器驱动实现方式:这种方式由服务器通过检测客户端发送过来的内容协商首部来主动决定发送相应版本的资源,涉及到著名q值检测技术。这种方式的问题就是,如果客户端的发送过来的相关首部不明确的话,那么就得服务器自己去判断了。
3、透明方式(代理缓存处理):让代理代替客户端与服务器端进行协商,从而减轻了服务器端的请求压力。
1、Accept首部集
2、User-Agent
Accept 告知服务器发送何种媒体类型
Accept-Language 告知服务器发送何种语言
Accept-Charset 告知服务器发送何种字符集
Accept-Encoding 告知服务器采用何种编码
——————————————————————————————————————————
*Accept首部* *实体首部*
——————————————————————————————————————————
Accept Content-Type
Accept-Language Content-Language
Accept-Charset Content-Type
Accept-Encoding Content-Encoding
Accept-Language: en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0
其中q值的范围从0.0~1.0(0.0是优先级最低的,而1.0是优先级最高的)。上面列出的那个首部,说明该客户端最愿意接收荷兰语(缩写为nl)文档,但英语(缩写为en)文档也行;无论如何,这个客户端都不愿意收到法语(缩写为fr)或土耳其语(缩写为tr)的版本。注意,偏好的排列顺序并不重要,只有与偏好相关的q值才是重要的。如果上面的列表中,服务器没有找到自己匹配的文档,那么服务器将会采取转码等修改文档方式来实现响应。
如User-Agent(此方式没有q值机制)实现发送不支持javascript版本的资源给客户端。
Vary首部:这个首部告知缓存(还有客户端的和所有下游的代理)服务器根据哪些首部来决定发送响应的最佳版本。
1、格式转换是指将数据从一种格式转换成另一种格式,使之可以被客户端查看。
2、信息综合是从文档中提取关键的信息片段称为信息综合。
3、前面描述的两类转码通常会减少Web文档的内容,但还有另一类转换会增加文档的内容,即内容注入转码。
此外,转码的替代做法是在web服务器上建立Web页面的不同副本,例如一个是HTML;一个是WML。但这种方式操作起来工程量大,一个小小的改动,所有的相关的页面都要更改,加大了存储空间等。