Http权威指南笔记(十四)-内容协商与转码

现在很多国际化的一些Web服务都会根据不同地区使用的语言不同,返回不同语言的页面内容展示给用户。而这里面就涉及到本篇介绍的内容——内容协商与转码。

1 内容协商的技术

目前的内容协商技术主要有3种——客户端驱动协商、服务器驱动协商和透明协商(也就是中间代理商进行选择和判断)。这三类大致归纳如下:

技  术工作原理优  点缺  点
客户端驱动客户端发起请求,服务器发送可选项的列表,客户端选择在服务器端的实现最容易。客户端可以选择最合适的内容增加了时延:为了获得正确的内容,至少要发送两次请求
服务器驱动服务器检查客户端的请求首部集并决定提供哪个版本的页面比客户端驱动的协商方式要快。HTTP 提供了 q 值机制,允许服务器近似匹配,还提供了 Vary 首部供服务器告知下游的设备如何对请求估值如果结论不是很明确(比如首部集不匹配),服务器要做猜测
透明某个中间设备(通常是缓存代理)代表客户端进行请求协商免除了 Web 服务器的协商开销。“比客户端驱动的协商要快关于如何进行透明协商,还没有正式的规范

下面就以上三种内容协商技术进行一些介绍。

2 客户端驱动的协商

该种协商技术的基本原理和过程就是:客户端发起请求的时候,先请求一次服务器可以提供服务的列表,然后客户端选择一个最合适自己的版本进行请求。这种协商方式,服务器实现简单,而且客户端也能够寻找到最适合自己的版本,但是缺点也是显而易见。每次为了获取一份内容都需要发送两次请求。这样会给用户感觉请求速度很慢。
其中具体的实现原理上:服务器有两种选择,一种是直接正常响应一个HTML页面,在里面包含有各个版本的描述和连接地址。另外一种就是直接返回300 Multiple Choices 响应代码,然后由用户进行选择。

3 服务器驱动的协商

这种协商技术,服务器需要依赖于客户端在请求中提供足够多的信息以便让服务器知道该返回什么版本的内容给客户端。这种协商技术相较于客户端驱动的协商,只需要一次请求即可,可以大大降低用户等待时间。但是主要技术点就在于客户端怎么给服务器提供足够多的可用于判断返回版本的信息。

在HTTP中,提供了不少用于协商内容的头部集。如下:

首  部描  述实体首部
Accept告知服务器发送何种媒体类型Content-Type
Accept-Language告知服务器发送何种语言Content-Language
Accept-Charset告知服务器发送何种字符集Content-Type
Accept-Encoding告知服务器采用何种编码Content-Encoding

这里最后一栏提供了响应信息中对应的一些实体信息头部。一般可以配合客户端一起使用。

这种协商技术虽然减少了用户等待时间,提交了效率。但是有个需要解决的问题是:返回的版本不一定是客户端最适合的版本。比如:服务器端只有英文、中文两种语言的内容。但是客户端给到的Accept-Language中却是需要西班牙语,这个时候服务器可能就不知道应该返回哪个版本了。也行用户在中文和英文中对英文更加熟悉,那他就可能希望返回英文版本,也有可能对中文更加熟悉呢。这个时候服务器就需要客户端提供更多的信息,用于匹配更加合适的版本。在HTTP中提供了一个质量值用于描述偏好信息,如:
Accept-Language: en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0
这里我们为每一种语言定义了一个q值。用于表示我们的偏好信息。其中q的取值范围为(0~1),数值越大,代表优先级越高,同时该值的对排列顺序并没有要求。比如上述例子中,nl优先级就要高于en。

4 透明协商

透明协商的机制利用中间代理实现。假定代理了解了客户端的需要,可以代表客户端与服务器进行协商,并将协商后的内容进行缓存。下次客户端在获取的时候,就能直接提供需要的内容。但是在服务器这端,为了支持该特性,需要告知代理服务器需要进行哪些请求首部的检查,以便达到和客户端进行最佳匹配的目的。HTTP中定义的Vary首部即可用于此处的实现。如:
Vary: User-Agent, Cookie

这里的Vary字段说明,需要根据User-AgentCookie两个首部进行内容筛选匹配,最终确定出一份最合适的文档。

中间代理缓存为了实现上面的功能,就必须对同一份内容的不同形式进行缓存。比如同一份文档存在英语和法语两种语言,中间缓存的代理就需要更加客户端的需求缓存两份文档,以便满足不同客户端的需求。如果筛选标准在多一些,从不同的纬度进行判断,如上述的列子。这个时候缓存代理就需要缓存成倍的内容。所以这个也会消耗掉大量测存储空间。

5 转码

我们前面讨论的都是假设服务器存在满足客户端需求的文档。然而,如果服务器没有能满足客户端需求的文档会怎么样呢?服务器可以给出一个错误响应。但理论上,服务器可以把现存的文档转换成某种客户端可用的文档。这种选项称为转码。常见的转码类型如下:

  1. 格式转换
    格式转换是指将数据从一种格式转换成另一种格式,使之可以被客户端查看。通过 HTML 到 WML 的转换,无线设备就可以访问通常供桌面客户端查看的文档了。通过慢速连接访问 Web 页面的客户端并不需要接收高分辨率图像,如果通过格式转换降低图像分辨率和颜色来减小图像文件大小的话,这类客户端就能更容易地查看图像比较丰富的页面了。
  2. 信息综合
    从文档中提取关键的信息片段称为信息综合(information synthesis),这是一种有用的转码操作。这种操作的例子包括根据小节标题生成文档的大纲,或者从页面中删除广告和商标。
  3. 内容注入
    前面描述的两类转码通常会减少 Web 文档的内容,但还有另一类转换会增加文档的内容,即内容注入转码。内容注入转码的例子有自动广告生成器和用户追踪系统。

现在大多数的Web服务器,也是通过动态注入生成不同的页面,从而替代以前的单独保存各种不同版本的静态资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值