HTTP 报文
用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。 HTTP 报文本身是由多行(用 CR+LF 作换行符) 数据构成的字符串文本。
报文首部 |
空行CR+LF |
报文主体 |
CR+LF:CR回车符,16进制0x0D;LF换行符,16进制0x0A
报文主体:应被发送的数据
请求报文及响应报文的结构
请求行 |
请求首部字段 |
通用首部字段 |
实体首部字段 |
其他 |
状态行 |
响应首部字段 |
通用首部字段 |
实体首部字段 |
其他 |
请求行:包含用于请求的方法, 请求 URI 和 HTTP 版本
状态行:包含表明响应结果的状态码, 原因短语和 HTTP 版本
首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部, 分别是: 通用首部、 请求首部、 响应首部和实体首部。
其他:可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)
编码提升传输速率
HTTP 在传输数据时可以按照数据原貌直接传输, 但也可以在传输过程中通过编码提升传输速率。 通过在传输时编码, 能有效地处理大量的访问请求。 但是, 编码的操作需要计算机来完成, 因此会消耗更多的 CPU 等资源。
报文主体和实体主体的差异
报文(message)
是 HTTP 通信中的基本单位, 由 8 位组字节流(octet sequence, 其中 octet 为 8 个比特) 组成, 通过HTTP 通信传输。
实体(entity)
作为请求或响应的有效载荷数据(补充项) 被传输, 其内容由实体首部和实体主体组成。
压缩传输的内容编码
常用的内容编码有以下几种。
gzip(GNU zip)
compress(UNIX 系统的标准压缩)
deflate(zlib)
identity(不进行编码)
分割发送的分块传输编码
在 HTTP 通信过程中, 请求的编码实体资源尚未全部传输完成之前, 浏览器无法显示请求页面。 在传输大容量数据时, 通过把数据分割成多块, 能够让浏览器逐步显示页面。
分块传输编码会将实体主体分成多个部分(块) 。 每一块都会用十六进制来标记块的大小, 而实体主体的最后一块会使用“0(CR+LF)”来标记
发送多种数据的多部分对象集合
多部分对象集合包含的对象如下。
multipart/form-data
在 Web 表单文件上传时使用。
multipart/byteranges
状态码 206(Partial Content, 部分内容) 响应报文包含了多个范围的内容时使用。
获取部分内容的范围请求
内容协商返回最合适的内容
内容协商制是指客户端和服务器端就响应的资源进行交涉, 然后提供给客户最为合适的资源, 内容协商会以响应资源的语言、 字符集、 编码方式等作为判断 基准。
内容协商技术的三种类型:
服务器驱动协商
客户端驱动协商
透明协商(上面两种的结合)
上一页 HTTP学习理解(一)
下一页 HTTP学习理解(三)