【HTTP图解】3-HTTP报文内的HTTP信息
HTTP报文
HTTP报文大致可分为报文首部和报文主体两块,以空行分割。
请求报文及响应报文的结构
编码提升传输速率
HTTP在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率。通过在传输时编码,能有效地处理大量的访问请求。但是,编码的操作需要计算机来完成,因此会消耗更多的CPU等资源。
报文主体和实体主体的差异
通常,报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
都是抽象的概念,没必要扣那么细,会抓包分析就可以了
压缩传输的内容编码
类似ZIP压缩文件。常用的内容编码有以下几种:
- gzip
- compress
- deflate
- identity(不进行编码)
分割发送的分块传输编码
在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。
这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)
分块传输编码会将实体主体分成多个部分,每一块都会用十六进制来标记块的大小,而实体主体的最后一块都会使用“0(CR+LF)”来标记。
发送多种数据的多部分对象集合
邮件中含有文字还有各种各样的附件,HTTP采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用。
在HTTP报文中使用多部分对象集合时,需要在首部字段加上Content-type。多部分对象集合的每个部分类型中,都可以含有首部字段。
获取部分内容的范围请求
在下载中断处恢复下载处恢复下载,要实现该功能需要指定下载的实体范围。
如果服务器端服务器无法响应范围请求,则会返回状态200 OK和完整的实体内容。
内容协商返回最合适的内容
同一个Web页面有可能存在着多份相同的页面。
当浏览器的默认语言是中文或者英文的时候,访问同一个页面,显示对应语言的版本,这种机制称为内容协商(Content Negotiation)。
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。
请求报文中的某些首部字段就是判断的基准:
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
内容协商技术有以下3中类型。
- 服务器驱动协商(Server-driven Negotiation):服务器根据客户端发送的请求的首部字段,自动处理,返回响应的内容。
- 客户端驱动协商(Agent-driven Negotiation):浏览器手动选择
- 透明协商(Transparent Negotiation):客户端和服务器端各自进行内容协商。