十七章、内容协商与转码

转码:服务器可以为手持设备把HTML页面转成WHL页面,这类动态内容变换称为转码。

1 内容协商的技术

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

这三类大致归纳如下:

2 客户端驱动的协商

该种协商技术的基本原理和过程就是:客户端发起请求的时候,先请求一次服务器可以提供服务的列表,然后客户端选择一个最合适自己的版本进行请求。这种协商方式,服务器实现简单,而且客户端也能够寻找到最适合自己的版本,但是缺点也是显而易见。每次为了获取一份内容都需要发送两次请求。这样会给用户感觉请求速度很慢。
其中具体的实现原理上:

服务器有两种选择,

  • 一种是直接正常响应一个HTML页面,在里面包含有各个版本的链接和每个版本的描述信息。
  • 一种就是发送回HTTP/1.1响应时,直接返回300 Multiple Choices 响应代码,然后由用户进行选择。

缺点:

  除了添加时延并且对每个页面都要进行繁琐的多次请求之外,致命缺点:它需要多个URL---公共页面要一个,其他每种特殊页面也都要一个 

3 服务器驱动的协商

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

Accept首部集

实体首部集像运输标签-----描述了把报文从服务器传输给给客户端的过程中必须的各种报文主体属性

内容协商首部集-----是由客户端发送给服务器用于交换偏好信息的

这种协商技术虽然减少了用户等待时间,提交了效率。但是有个需要解决的问题是:返回的版本不一定是客户端最适合的版本。比如:服务器端只有英文、中文两种语言的内容。但是客户端给到的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/1.1规范中没有定义任何透明协商机制,但定义了Vary首部服务器在响应中发送Vary首部,以告知中间节点需要使用哪些请求首部进行内容协商。如:
Vary: User-Agent, Cookie

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

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

5 转码

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

a)、格式转换
  格式转换是指将数据从一种格式转换成另一种格式,使之可以被客户端查看。通过 HTML 到 WML 的转换,无线设备就可以访问通常供桌面客户端查看的文档了。通过慢速连接访问 Web 页面的客户端并不需要接收高分辨率图像,如果通过格式转换降低图像分辨率和颜色来减小图像文件大小的话,这类客户端就能更容易地查看图像比较丰富的页面了。

:内容转换或转码-------可使访问设备能够查看内容

  内容编码或传输编码------用于高效或安全地传输内容

b)、信息综合
  从文档中提取关键的信息片段称为信息综合(information synthesis),这是一种有用的转码操作。这种操作的例子包括根据小节标题生成文档的大纲,或者从页面中删除广告和商标。
c)、内容注入
  前面描述的两类转码通常会减少 Web 文档的内容,但还有另一类转换会增加文档的内容,即内容注入转码。内容注入转码的例子有自动广告生成器和用户追踪系统。

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

原文地址:https://www.cnblogs.com/liuzhiyun/p/11518684.html

时间: 2024-11-04 20:13:28

十七章、内容协商与转码的相关文章

2017.2.16 开涛shiro教程-第十七章-OAuth2集成

原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十七章-OAuth2集成 1.OAuth2介绍 (1)应用场景 很多开放平台,比如新浪微博开放平台,都在使用开发API接口供开发者使用.即带来了,第三方应用要到开放平台授权的问题.OAuth就是做这个的. 1 OAuth2官网:http://oauth.net/2/ 2 OAuth2协议:http://tools.ietf.org/html/

MiS603开发板 第十七章 图像之HDMI接口测试输入日志标题

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十七章 图像之HDMI接口测试 17.1 HDMI概述 HDMI是High Definition Multimed

读《构建之法》第四章、第十七章有感

第四章 问题1:程序各方面的质量只取决于水平较高的程序员么? 引用:在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位. 结对编程在我看来是一种合作,对于实力的不均匀,让我想起来了短板问题的故事. 所以对于书中提到的程序的质量取决于更高水平的程序员,我是有一些疑问的.我认为两个人的结对编程,重要的是合作和互补.只有当实力差不多均衡的时候才能发挥到最优程度.书中之前也提到了在结对编程模式下,一对程序员肩并肩.平等的.互补的进行开发工作.同时,结对合作是非

第四章与第十七章阅读有感

第四章 两人合作 此章主要讲了两人合作中的主要注意事项,最主要的是代码规范与代码复审 我的困惑也主要来自这两个地方 代码规范方面: ①P61缩进问题,本书提倡用空格而不提倡用tab键.但是我个人在编写代码时,工作室学长有提醒我最好用tab键.他向我展示了空格与tab键两种编写代码方式,其中明显tab键更加美观和清晰.本书解释的不要用tab键的原因是tab键在不同情况下会显示不同的长度.但在团队中大家使用的编译器应该是同一个,tab键的缺陷其实在团队作业中并不明显.那么在这种情况下应该选择大家认为

个人:构建之法第十七章读后感

第十七章在开始讲一个项目中的三个角色: 猪:项目的所有者,成功了是最大收益者,失败了最大损失者 鸡:项目的参与者,成功了得到应得的酬劳,失败了也没什么损失 鹦鹉:项目的外援 这一节应该是给“猪”说的,猪需要弄清团队成员投入/承诺/责任,这很重要,也是猪的责任. 分配好角色后,完成项目的过程也会有各种各样的问题: 在做事上会分为:做事的,不做事的,不让别人做事的,做假事的,假装做事的 项目完成后,如何分配利益又是一个问题:比资历?平均?比效率?团队互评?比犯得过错? 书中提出的解决办法: 20%给

第十四——十七章作业

                                                                                                     第十四章 15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test),你怎么看? 在一些软件公司中,QA的工作中包含了Test的角色,负责验证程序是否符合预先设计的功能和特性.但是QA的工作量是很多的,一个好的QA不仅需要对程序架构有着很好的理解,对程序功能和性能都有着较深的理解,并且要

CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性:

《构建之法》第十七章读后感

通过阅读<构建之法>第十七章,不能说对我造成了什么深远的影响,但是还是感触颇深: 第一,工作分配的重要性,说道工作分配,不得不说我们个小组的组长们,组长不仅仅是一个团队的领导者,更是这个团队的灵魂.它不仅需要了解随时掌握各组员的动向,更重要的是,他需要了解各组员的能力,然后根据个人的能力,然后再去非陪相应的任务,只要这样才能做到“物尽其用”,才能更好的完成我们的项目,有时甚者能更创造出以外的效果,达到更完美的状态.这不仅是组长的能力  其实其无时无刻也体现着我们这个小组的团结力和创造力.当初选

第十七章 路由交换机编程

                第十七章    路由交换机编程 MTU = 64KB 毕竟是理想,现阶段实现起来还是有难度:牵涉到较多问题,与大网同步.流量平衡.时隙交换等.所以,APO还是决定MTU = 48E = 1536B,包含头部2E.帧同步头8B.尾部CRC的4B等:数据包的有效内容(不含头部)为45E = 1440B.头部2E = 64B,其中MAC头14B.IP头18B.TCP/UDP/ICMP头32B. 二层交换机是以存储转发为主设计,三层以上的交换机是以256位差分总线的时隙交

Gradle 1.12 翻译——第十七章. 从 Gradle 中调用 Ant

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41204073 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin