概述

最近对http很感兴趣,于是开始看《http权威指南》。别人都说这本书有点老了,而且内容太多。我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做,还告诉你为什么这么做。于是我把学到的知识点记录下来,供以后开发时参考,相信对其他人也有用。

实体和编码

1.http要确保它所承载的“货物”满足以下条件:

  • 可以被正确的识别。(通过Content-Type首部说明媒体格式,Content-Language首部说明语言)
  • 可以被正确的解包。(通过Content-Length首部和Content-Encoding首部)
  • 最新的。(通过实体验证码和缓存过期控制)
  • 符合用户的需要。(基于Accept系列的内容协商首部)
  • 在网络上可以快速有效地传输。(通过范围请求、差异编码以及其他数据压缩方法)
  • 完整到达、未被篡改。(通过传输编码首部和Content-MD5校验和首部)

2.http的早期版本通过Content-Length来检测报文截尾,如果缓存服务器收到被截尾的报文却没有识别出截尾的话,它可能会储存不完整的内容并多次使用它来提供服务。Content-Length首部对于持久连接也是必不可少的,不然无法知道报文在何处结束,下一条报文从何处开始。

3.在使用分块编码的情况下,使用持久连接时可以没有Content-Length首部。

4.为了检测实体主体的数据是否被不经意地修改,发送方可以在生成初始的主体时,生成一个数据的校验和,用Content-MD5首部来发送。

5.Content-Type首部字段说明了实体主体的MIME类型。它还支持可选的参数来进一步说明内容的类型,比如下面的charset参数:

Content-Type: text/html;charset=iso-8859-4

6.Accept-Encoding字段包含用逗号分隔的支持编码的列表。并且可以给每种编码附带Q(质量)值参数来说明编码的优先级。

7.内容编码是对报文的主体进行的可逆变换,比如gzip,但是用gzip压缩JPEG这类东西效果不够好。这个时候就用传输编码了。使用传输编码是为了改变报文中的数据在网络上传输的方式,比如分块传输。

8.Transfer-Encoding告诉接收方为了可靠地传输报文,已经对其进行了何种传输编码。而TE用在请求首部中,告知服务器可以使用哪些传输编码扩展。

9.对于分块编码来说,服务器可以使用大小为0的块作为主体结束的信号,所以它不需要Content-Length首部。

10.范围请求:http还允许客户端实际上只请求文档的一部分,或者说某个范围。比如说下载重连,这个时候就从某个范围(Range首部字段)开始请求。当然前提是这段时间内,该对象没有改变过。

11.Range首部在流行的P2P(Peer-to-Peer)文件共享客户端软件中得到广泛应用,他们从不同的对等实体同时下载多媒体文件的不同部分。

12.差异编码:差异编码是http协议的一个扩展,它通过交换对象改变的部分而不是完整的对象来优化传输性能。客户端使用A-IM首部(Accept-Instance-Manipulation)来说明可以接受的差异编码算法,服务端通过IM响应收不来说明使用的是哪个差异编码算法。

《http权威指南》读书笔记14的更多相关文章

  1. HTTP权威指南读书笔记

    HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...

  2. css权威指南读书笔记

    今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...

  3. 经典的性能优化最佳实践 web性能权威指南 读书笔记

    web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典 ...

  4. css权威指南读书笔记-第10章浮动和定位

    这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...

  5. Hadoop权威指南读书笔记

    本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系 ...

  6. JS权威指南读书笔记(七)

    第十七章 事件处理 1 客户端JS程序采用了异步事件驱动编程模型. 2 关于事件的重要定义     a 事件类型(event type)     b 事件目标(event target) target ...

  7. JS权威指南读书笔记(六)

    第十五章 脚本化文档   1 文档对象模型(DOM)是表示和操作HTML和XML文档内容的基础API. 2 文档节点的部分层次结构 Text和CDATASection都是characterData的子 ...

  8. JS权威指南读书笔记(二)

    第四章 表达式和运算符 1 new调用构造函数的过程     a 创建一个新的空对象     b 设置空对象的_proto_指向构造函数原型prototype     c 将这个新对象当做this的值 ...

  9. JS权威指南读书笔记(一)

    第一章 JavaScript概述 1 JS是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.   第二章 词法结构 1 JS程序是用Unicode字符集编写的. 2 JS是区 ...

  10. JavaScript权威指南读书笔记

    JavaScript 1.变量 变量是一个表示值的符号,是一个名字,他的本质是值: var x; //----声明一个变量: 值通过等号“=”赋给变量,x = 16; 对象是名/值对的集合,或字符串到 ...

随机推荐

  1. 关于python27和windows系统的中文编码问题

    最近想写一个python脚本实现对文件夹中的文件进行批量命名.每个文件对应从txt文档中提取出来的一行,因为文件名是中文,所以涉及到了一些中文编码的问题. 脚本运行环境是win10+python27 ...

  2. vs2013 v8编译

    最新v8,只能在vs2015编译(在官网看了资料,新版本v8/chrome使用的c++11特性只能用vs2015编译) vs2015 vc需要的dll有近50个,发布不太方便,所以采用vs2013up ...

  3. python实现bt种子 torrent转magnet

    Python实现bt转磁链  参考前人资料主要两种方式 1,利用python的bencode模块 2,安装libtorrent模块 尝试过两种方法特记录 环境:Windows系统  python 3 ...

  4. GUI学习之五——QAbstractButton类学习笔记

    今天总结一下AbstractButton类的学习笔记. 一.描述 AbstractButton是对各种按键的抽象类他的继承关系是这样的 首先,QAbstractButton继承了QWidget类的各种 ...

  5. Finance版本计划

    2.0.0.3 1. 支持自定义报表 提供页面自定义报表,根据存储过程,前端页面传参调用 根据存储过程数据集控制简单样式(数字靠右,列宽) 2. 支持报表公式可修改 定义公式规则(文档) 2.0.0. ...

  6. beamer插入图片的一些技巧

    1. 点一下,让另一张隐藏的图出现

  7. LNMP php缓存器下载

    一.LNMP php缓存器下载(1)配置环境变量 LC_ALLecho ‘export LC_ALL=C'>> /etc/profilesource /etc/profile 生效命令 ( ...

  8. css2d 3d

    2D转换 1.rotate()   旋转 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...

  9. mktime 夏令时

    我们的最终目的是把字符串格式的时间转换为内部使用的“日历时间”,即到UTC 1970年1月1日零时的秒数.这里就存在夏令时的问题.比如俄罗斯时间2008年10月26日2:30由于夏令时的跳变会经过两次 ...

  10. php常用字符串方法

    chop()        移除字符串右侧的空白字符或其他字符 ltrim()        移除字符串左侧的空白字符或其他字符 rtrim()        移除字符串右侧的空白字符或其他字符 tr ...