HTTP报文内的HTTP信息

声明:本人的所有博客皆为个人笔记,作为个人知识索引使用,因此在叙述上存在逻辑不通顺、跨度大等问题,希望理解。分享出来仅供大家学习翻阅,若有错误希望指出,感谢!

HTTP报文内的HTTP信息

HTTP报文结构

HTTP报文是由多行数据构成的字符串文本,使用CR+LF换行

CR:回车符:\r LF:换行符:\n

HTTP报文大致可分为报文首部和报文主体两部分,二者由最初的空行(CR+LF)来划分

通常,不一定要有报文主体

请求报文首部

  1. 请求行
  2. 请求首部字段
  3. 通用首部字段
  4. 实体首部字段
  5. 其他首部字段

相应报文首部

  1. 状态行
  2. 响应首部字段
  3. 通用首部字段
  4. 实体首部字段
  5. 其他首部字段

请求行:包含用于请求的方法、请求URI和HTTP版本

状态行:包含表明响应结果的状态码、原因短语和HTTP版本

首部字段:包含请求和响应的各种条件和属性的各类首部

其他:可能包含HTTP的RFC里未定义的首部(cookie等)

编码提升传输效率

HTTP在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输效率

编码操作需要计算机来完成,因此会消耗更多cpu资源(牺牲cpu资源来提升传输效率)

HTTP中有一种被称为内容编码的功能可以进行压缩操作

报文主体与实体主体的区别

报文:HTTP的基本通信单位,由8位组字节流组成

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

通常报文主体等于实体主体,只有传输过程中进行编码操作时,实体主体的内容发生变化,导致它和报文主体产生差异

分割发送的分块传输编码

在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面,在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面,这种把实体主体分块的功能称为分块传输编码

分块传输编码会把实体主体分成多个部分,每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用(CR+LF)来标记

使用分块传输编码的实体主体会由接收的客户端负责解码

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

HTTP协议支持多部分对象集合,发送的一份报文主体内可含有多类型实体

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

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

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

多部分对象集合的每个部分类型中,都可以含有首部字段

获取部分内容的范围请求

指定范围发送的请求叫做范围请求,可以用于实现下载的中断恢复

执行范围请求时,会用到首部字段Range来指定资源的byte范围

byte范围指定形式如下:

  • Range:bytes=5001-10000 //获取5001~10000字节
  • Range:bytes=5001- //获取5001字节之后的全部
  • Range:bytes=0-3000,5000-7000 //从最开始到3000字节和5000~7000字节的多重范围

针对范围请求,响应会返回状态码为206的响应报文,响应报文中的Content-Range指定范围的实体内容

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

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

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

内容协商机制是指客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源

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

包含在请求报文中的某些首部字段为判断的基准:

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

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

  • 服务器驱动协商:由服务器端进行内容协商,以请求的首部字段为参考,在服务器端自动处理
  • 客户端驱动协商:由客户端进行内容协商,用户从浏览器提供的可选项列表中手动选择
  • 透明协商:服务器驱动协商+客户端驱动协商
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值