学习笔记 图解HTTP 第三章:HTTP报文内的HTTP信息

  • Post author:
  • Post category:其他




HTTP报文

用于HTTP协议交互的信息称为HTTP报文。请求端的HTTP报文叫做

请求报文

,响应端的叫做

响应报文

。HTTP报文本身是由多行数据构成的字符串文本。

HTTP报文可以分为报文首部和报文主体两块内容,

但是不一定要有报文主体


在这里插入图片描述



请求报文和响应报文的结构

在这里插入图片描述

请求报文的实例:

在这里插入图片描述

第一行请求行:请求方法、HTTP版本和请求URI

其余的有

  1. 首部字段:包含表示请求和响应的各种条件和属性的各类首部。
  2. 其他:可能包含HTTO的RFC里未定义的首部,如Cookie。

响应报文类似。



编码提升传输速率

HTTP在传输数据时可以按照数据原貌直接传输,也可以在传输过程中

通过编码提升传输u速率



在传输时编码,能有效地处理大量的访问请求。



报文主体和实体主体的差异

  • 报文(message)

    是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。
  • 实体(entity)

    作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成。


报文就是一个传输单位,用于传输(请求或响应的)实体。


通常,报文主体就是实体主体,只有传输中进行编码后,实体主体会因此发生变化,此时报文主体才不等于实体主体。



压缩传输的内容编码

HTTP协议中有一种被称为内容编码的功能可以进行类似ZIP压缩文件的操作。

内容编码指明应用在实体内容上的编码格式,并压缩实体信息,内容编码后的实体由客户端接受并负责解码。

在这里插入图片描述

常用的内容编码格式有以下几种:

  • gzip(GNU zip)
  • compress(UNIX系统的标准压缩)
  • deflate(zlib)
  • identity(不进行编码)



分割发送的分块传输编码

在HTTP通信中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面,通过

把数据分割成多块,能够让浏览器逐步显示页面



这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)。

在这里插入图片描述

分块传输编码会将

实体主体

分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会用“0(CR+LF)”来标记。



发送多种数据的多部分对象集合

举例:邮件里可以包含多种数据(文字,图片,文件等),这是由于MIME(多用途因特网邮件扩展)机制,而在MIME中会使用 多部分对象集合的方法来容纳不同类型的数据。

相应地,HTTP协议中也有多部分对象集合,发送地一份报文主体内可含有多类型实体,通常在上传图片或文本文件时使用。


多部分对象集合包含的对象如下:

  • multipart/form-data

    在Web表单文件上传时使用
  • multipart/byteranges

    状态码206(Partial, Content, 部分内容)响应报文包含了多个范围的内容时使用。

使用方法:

在这里插入图片描述

在这里插入图片描述


boundary

字符串的作用:

划分多部分对象集合指明的各类实体。

boundary一般由一个字符串构成,用于分割各个实体,是封装边界。在各个实体的起始行之前插入:

--boundary

,实体的最后插入

--boundary--

标记作为结束,如:

--ac23cs01 …………--ac23cs01--



boundary参考文章



获取部分内容的范围请求

在网络上下载一个体积大的图片或文件时,如果下载过程出现了中断,需要一种可恢复的机制来保证

能从之前下载中断处恢复下载



指定”下载的实体范围“的请求叫做

范围请求(Range Request)



在这里插入图片描述

如上图所示,执行范围请求时,会用到首部字段Range来指定资源的byte范围:

  • 5001-10000字节

    Range: bytes=5001-10000
  • 从5001字节之后全部的内容

    Range: bytes=5001-
  • 从起始到3000字节,以及从5000-7000字节的多重范围

    Range: bytes=-3000, 5000-7000

针对范围请求,响应会返回状态码206 Partial Content(

和前一节的多部分对象集合一样的状态码



此外,多重范围的范围请求,响应会在首部字段Content-Type标明

multipart/byteranges

后返回响应报文。

如果服务器无法响应范围请求,则返回:200 OK + 完整的实体内容。



内容协商返回最合适的内容

根据浏览器的默认语言,访问同一URI的Web页面时,会显示对应语言的页面,这样的机制称为

内容协商(Content Negotiation)



内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。


包含在请求报文中的部分首部字段就是判断的基准

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

内容协商技术有以下三种类型:

  1. 服务器驱动协商(Server-driven Negotiation)

    由服务器端进行内容协商,以请求首部字段为参考,在服务器端自动处理。
  2. 客户端驱动协商(Agent–driven Negotiation)

    由客户端进行内容协商的方式。用户可以从浏览器显示的选项列表中手动选择,或者利用JavaScript进行选择,如按OS的类型、浏览器的类型等自动切换PC页面或手机页面。
  3. 透明协商(Transparent Negotiation)

    是上述两种方式的结合体,服务器端和客户端各自进行内容协商。



版权声明:本文为qq_44265217原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。