学习笔记 HTTP权威指南 第17章 内容协商与转码

237 阅读4分钟

17.1 内容协商

  • 什么是内容协商
    • 服务器有不同语言版本的网页
    • 给用户发送哪一个呢
    • 这个过程是就内容协商

17.2 客户端驱动协商

  • 客户端驱动协商的流程

    • 客户端发起请求
    • 服务器响应300 Multiple Choices
    • 客户端显示一个列表,供用户选择使用哪个版本
  • 客户端协商的不足

    • 会发起两次请求,第1次是获取列表,第2次才是获取资源
      • 导致速度慢,用户体验下降
    • 需要多个URL,每个版本的资源都是一个URL
      • 用户分享时会存在问题

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个人,来开发一个至少目前看起来根本不太重要的业务,最后投了那么多精力,只形留下一些卵用没有的文档,部门还是被拆了.或许可能会觉得,公司这是怎么在想?不是浪费钱么?