HTTP读书笔记(六)

 第九章 HTTP编码

1.HTTP要确保它所承载的货物,可以被正确识别提取,必须要满足:通过Content-Type首部说明媒体格式,Content-Language首部说明语言。通过Content-Length首部和Content-Encoding首部可以被正确的解包。通过实体验证码和缓存过期控制保证是最新的。通过范围请求。基于Accept系列的内容协商首部,达到用户的需求。通过范围请求,差异编码以及其他数据压缩方法,使得在网络上快速有效的传输。通过传输编码首部和Content-MD5校验和首部达到完整性,避免被篡改。

2.HTTP报文分析大法(抓了包看不懂的注意了)

HTTP读书笔记(六)_第1张图片

首部的结尾都是0aOx表示是16进制,开始我也忘记了所以看不懂),没两个编码表示一个字节(也是字符)。这个是抓的文本信息。

HTTP读书笔记(六)_第2张图片

Gif6个字节的版本标志开头,2个字节的宽度和两个字节的宽度。这里之所以是0227不是2702的原因应该是高低位的问题。高位在右低位在左所以颠倒了顺序。(很多时候容易忽略这个问题)

3.Content-Length 实体的大小问题:这里的长度是有问题的,如果gzip压缩的话这里的长度就是指压缩过后的长度,并不是原始长度。除非使用分块编码,否则带有实体的首部中必须要要有Content-Length

4.Content-Length与持久连接:Content-Length首部对于持久化连接是必不可少的,如果响应通过持久化连接传送,就可能有另外一条HTTP响应紧随其后,客户端通过Content-Length就可以知道报文在何处结束,下一条报文从何处开始,这个的结束和开始是针对的tcp/ip协议里面的数据包(个人理解)

5.HTTP的编解码:对与HTTP而言没有任何一个首部可以用来说明原始的位编码的主体长度,这就让客户端难以验证编解码过程的完整性。

6.确定实体长度的规则:如果含有描述传输编码首部Transfer-Encoding(优先级大于Content-Length)就不再采用HTTP的恒等编码。如果采用了multipart/byteranges(多部分多自己)媒体类型如果没有Content-Length首部,则每一个报文的部分都要说明自己的大小,这种是自定义类型,除非知道否者不能使用。

7.实体摘要常用Content-MD5,用户检验完整性和,快速定位,减少重复内容的存储。

8.HTTP内容编码过程:先生成原始报文,有Content-typeContent-Length,然后对内容报文进行编码,前两个首部都有可能该变,Content-Encoding首部,这样客户端就可以解码了。

9.内容编码类型:gzip,compressdeflate,identity。前三种都是无损压缩,最后一种指的是没有压缩。

10.Accept-Encoding就是客户端支持的编解码类型,如果没有带AE首部就是说明支持一切的编解码方式。

11.传输编码和分块编码,使用传输编码是为了改变报文中的数据在网络中的传输方式。


你可能感兴趣的:(实体,抓包分析,HTTP编解码)