# 【图解HTTP】第三章 HTTP报文内的HTTP信息 作者:wallace-lai
发布:2024-03-19
更新:2023-03-19
## 一、报文结构 用于HTTP协议交互的信息被称为**HTTP报文**。请求端(客户端)的HTTP报文叫做**请求报文**,响应端(服务器端)的叫做**响应报文**。 HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。 ![HTTP报文结构](../media/images/Network/http2.png) 以下是一个具体请求和响应报文的案例。 ![HTTP报文结构](../media/images/Network/http3.png) ![HTTP报文实例](../media/images/Network/http4.png) 请求报文和响应报文的首部内容由以下数据组成。 (1)请求行:包含用于请求的方法,请求URI和HTTP的版本; (2)状态行:包含表明响应结果的状态码,原因短句和HTTP版本; (3)首部字段:包含表示请求和响应的各种条件和属性的各类首部,具体有 - 通用首部 - 请求首部 - 响应首部 - 实体首部 (4)其他:可能包含HTTP的RFC里未定义的首部 ## 二、HTTP机制 ### 内容编码 内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码 ### 分块传输编码 分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记 ### 多部分对象集合 在MIME(Multipurpose Internet Mail Extensions,多用途因特网邮件扩展)扩展中会使用一种称为多部分对象集合(Multipart)的方法,来容纳多份不同类型的数据。相应地,HTTP协议中也采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用 ### 范围请求 指定范围发送的请求叫做范围请求(Range Request)。对一份10000字节大小的资源,如果使用范围请求,可以只请求5001~10000字节内的资源。 执行范围请求时,会用到首部字段Range来指定资源的byte范围。byte范围的指定形式如下。 (1)请求5001 ~ 10000字节 ``` Range:bytes=5001-10000 ``` (2)从5001字节之后全部的 ``` Range:bytes=5001- ``` (3)从一开始到3000字节和5000 ~ 7000字节的多重范围 ``` Range:bytes=-3000,5000-7000 ``` ### 内容协商 同一个Web网站有可能存在着多份相同内容的页面。比如英语版和中文版的Web页面,它们内容上虽相同,但使用的语言却不同。 当浏览器的默认语言为英语或中文,访问相同URI的Web页面时,则会显示对应的英语版或中文版的Web页面。这样的机制称为内容协商(Content Negotiation)。