一、实体
(1) 实体:实体包含实体首部和实体主体
(2) 实体首部:实体首部描述了 HTTP 报文的内容,参考实体的首部字段
(3) 实体主体:实体主体就是 HTTP 报文,即原始的数据
二、Content-Length
(1) Content-Length 首部指出报文中实体主体的字节大小,这个大小是包含了所有内容编码的,比如对主体压缩,则 Content-Length 表示的是压缩后的大小而不是原始主体的大小
(2) 检测截尾:使用 Content-Length 首部是为了能够检测出服务器崩溃而导致的报文截尾,HTTP 的早期版本采用关闭连接的方法来划定报文的结束,但是,没有 Content-Length 的话,客户端无法区分到底是报文结束时正常的连接关闭,还是报文传输中由于服务器崩溃而导致的连接关闭,客户端需要通过 Content-Length 来检测报文截尾。报文截尾的问题对缓存代理服务器来说尤其严重,如果缓存服务器收到被截尾的报文却没有识别出截尾的话,它可能会存储不完整的内容并多次使用它来提供服务。
(3) Content-Length 与 持久连接:客户端通过 Content-Length 首部就可以知道报文在何处结束,下一条报文从何处开始,因为连接是持久的,客户端无法依赖连接关闭来判别报文的结束
(4) 内容编码:HTTP 允许对实体主体的内容进行编码,比如压缩,而 Content-Length 记录的是编码后的主体的字节长度而不是原始主体的长度
三、Content-MD5
(1) Content-MD5 作用:Content-MD5 是对主体的 MD5 校验和,服务器使用 MD5 首部发送对实体主体运行 MD5 算法的结果,客户端必须先进行传输编码的解码,然后计算所得到的的未进行传输编码的实体主体的 MD5
(2) 为什么要使用 Content-MD5 :防止 HTTP 报文在传输过程中被修改,客户端通过检查这个校验和(MD5)来检查是否被修改
四、Content-Type
(1) Content-Type 首部字段说明了实体主体的 MIME 类型,以便客户端应用程序使用 MIME 类型来解释和处理其内容,常见的媒体类型
(2) 文本的字符编码:Content-Type 可以用字符集来说明把实体中的比特转换为文本文件中的字符的方法,如 Content-Type: text/html;charset=UTF-8
五、内容编码
(1) 什么是内容编码:HTTP 允许在发送报文之前对内容进行编码,比如把 HTML 文档进行压缩之后再传输
(2) 内容编码的过程:① 服务器生成响应报文 ② 服务器对响应报文进行编码并发送给客户端 ③ 客户端接收到编码后的报文,进行解码,获得原始报文
(3) 内容编码的类型:① gzip 压缩 ② compress 压缩 ③ zlib 压缩
(4) Accept-Encoding :该首部字段告诉服务器客户端所支持的编码类型
六、传输编码
(1) 使用传输编码是为了改变报文中的数据在网络上传输的方式,传输编码作用在整个报文上,报文自身的结构会发生改变
(2) 你可以用传输编码来发送数据,并用特别的结束脚注表明数据结束;你可以用传输编码把报文内容扰乱,然后在网络上进行传输
(3) Transfer-Encoding :该首部告知客户端为了可靠地传输报文,已经对其进行了何种编码
(4) TE :用在请求首部中,告知服务器可以使用哪些传输编码扩展
七、分块编码
(1) 分块编码把报文分割为若干个大小已知的块,块之间是紧挨着发送的,这样就不需要在发送之前知道整个报文的大小了,分块编码也是一种传输编码