17.1 内容协商
- 什么是内容协商
- 服务器有不同语言版本的网页
- 给用户发送哪一个呢
- 这个过程是就内容协商
17.2 客户端驱动协商
-
客户端驱动协商的流程
- 客户端发起请求
- 服务器响应300 Multiple Choices
- 客户端显示一个列表,供用户选择使用哪个版本
-
客户端协商的不足
- 会发起两次请求,第1次是获取列表,第2次才是获取资源
- 导致速度慢,用户体验下降
- 需要多个URL,每个版本的资源都是一个URL
- 用户分享时会存在问题
- 会发起两次请求,第1次是获取列表,第2次才是获取资源
17.3 服务器驱动协商
-
服务端驱动协商的流程
- 服务器根据accept首部或agent首部进行判断
-
如果服务器没有客户端需要的版本时怎么办
- 对文档进行转码
-
apache中怎么设置
- 这个跳过
17.4 透明协商
-
什么是透明协商
- 由中间代理进行内容协商的方式
-
透明协商的前提
- 代理能够了解客户端的预期
- 服务器有能力告知代理,需要检查哪些首部来响应具体的版本
- 代理可以为通过单个URL访问的文档保存不同的副本
- 代理可以进行内容转码
-
什么是备用候选
- 代理如果缓存了一个URL的资源
- 但是下一次请求过来要求的语言或字符集和缓存版本不一致
- 那么就要重新从服务器请求,缓存一个新的副本
- 同一个URL资源下的多个副本就是备用候选
-
为什么需要备用候选
- 可以为客户端请求响应最符合要求的版本
-
vary首部的作用是什么
- 告知代理,服务器是通过哪些首部来判断客户端需要什么样的版本
-
为什么需要vary首部
- 正常情况下,服务器通过accept-charset或accept-language来判断客户端所需内容
- 但有可能也会通过agent或url来判断
- 缓存要想知道每个服务器具体是通过哪些字段来判断的,就要用这个来告诉它
17.5 转码
如果服务器没有满足客户端需要的内容就会进行转码.
- 3种不同的转码方式
- 格式转换:将一种格式换成另外一种格式
- PNG转webp以降低尺寸
- HTML转WML以适应手机端(已经绝迹了)
- 信息综合: 只提取文档中关键信息进行响应
- 生成文本大纲方便阅读
- 内容注入
- 自动广告生成
- 用户追踪系统
- 格式转换:将一种格式换成另外一种格式
17.5.1 转码与静态预生成对比
-
静态预生成的缺点
- 每个版本都要生成页面
- 肯定会占用更多空间
- 小的改动都要批量维护,麻烦
- 有些转码操作幽然会增加开发工作量
-
转码的缺点
- 转码必定会进行运算,增加时延
-
如何解决转码时延问题
- 由代理或者专门的硬件设备来进行转码
17.6 规划
专门成立过内容协商工作组,还出了很多规范.在这里我会觉得这些人真TM牛逼,很有前瞻性.东西还完全能够用,他们就在为不够严重的缺点来找新的方案了,还动用了专人成立工作组.如果换成是我,怎么可能会去想到这么遥远的事情,还为之付出实际行动.
但如果把事情换到工作中来对比一下,就会得出两种不同的结论,这可能就是外来的和尚好念经吧,根本原因就是内心对自己身边的看得见的一些事情的偏见.
明明现在人手很充足,公司专门成立1个部门,新招了10个人,来开发一个至少目前看起来根本不太重要的业务,最后投了那么多精力,只形留下一些卵用没有的文档,部门还是被拆了.或许可能会觉得,公司这是怎么在想?不是浪费钱么?