《图解HTTP》————第三章

HTTP报文内的HTTP信息

1.HTTP报文

用于HTTP协议交互的信息称为HTTP报文

大致分为报文首部和报文主体,由空行(CR+LF)划分

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

请求报文 报文首部

  • 请求行
  • 请求首部字段
  • 通用首部字段
  • 实体首部字段
  • 其他

响应报文 报文首部

  • 状态行
  • 响应首部字段
  • 通用首部字段
  • 实体首部字段
  • 其他

首部内容由以下数据组成:

  • 请求行:包含用于请求的方法,请求URI和HTTP版本
  • 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
  • 首部字段:包含请求和响应的各种条件和属性的各类首部 四种首部:通用首部,请求首部,响应首部,实体首部
  • 其他:可能包含HTTP的RFC里未定义的首部 (Cookie等)

3.编码提升传输速率

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

报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输

实体(entity):作为请求或相应的有效荷载数据(补充项)被传输,其内容由实体首部和实体主体构成

HTTP报文主体用于传输请求或者响应的实体主体

压缩传输的内容编码

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

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

分割发送的分块传输编码

传输大量数据时,通过把数据分割成多块,可以让浏览器逐步显示页面

把实体主体分块的功能称为分块传输编码

每一块用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记

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

邮件包括文字以及各种附件,采用了MIME(多用途英特网邮件扩展)机制

HTTP也采纳了 多部分对象集合(Multipart)

包含的对象如下:

  • multipart/form-data:在Web表单文件上传时使用
  • multipart/byteranges:状态码206响应报文包含了多个范围的内容时使用

在HTTP报文中使用多部分对象集合时,需要在首部字段里加上 Content-type

使用boundary字符串来划分多部分对象集合指明的各类实体。在boundary字符串指定的各个实体的起始行之前插入“--”,而在多部分对象集合对应的字符串最后插入“--”标记做为结束。

5.获取部分内容的范围请求

恢复 恢复之前中断的下载

范围请求:指定范围发送的请求

对于一份10000字节大小的资源,可以只请求5001-10000的范围

GET /yip.jpg HTTP/1.1

Host:www.usagidesign.jp

Range:bytes=5001-10000

用Range来指定资源的byte范围:

  • 5001-10000字节

Range:bytes=5001-10000

  • 从5001字节之后全部

Range:bytes=5001-

  • 从一开始到3000,5000~7000字节的多重范围

Range:bytes=0-3000,5000-7000

针对范围请求,响应会返回状态码为206 Partial Content的响应报文

针对多重范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文

如果服务器无法响应范围请求,则会返回状态码200 OK和完整的实体内容

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

浏览器内容相同但使用的语言不同,当浏览器默认英文时,访问相同URI的Web页面时,会显示对应的英文版本。该机制为内容协商

内容协商机制:指客户端和服务器就响应内容进行交涉,然后提供给客户端最为合适的资源。以语言,字符集,编码方式等为基准判断响应的资源

包含在请求报文中的某些首部字段就是判断标准:

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

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

  • 服务器驱动协商:由服务器端进行内容协商,以请求首部字段为参考,在服务器端自动处理
  • 客户端驱动协商:有客户端进行内容协商的方式,用户从浏览器现实的可选项目组手动选择
  • 透明协商:以上结合,是由服务器和客户端各自进行内容协商的一种方法

猜你喜欢

转载自blog.csdn.net/yuanjiaqi_k/article/details/85683429
今日推荐