《图解HTTP 2024-Y02》Chapter3 HTTP报文内的http信息

93 阅读3分钟

目前市场上得书籍很少能将http相关知识讲的很清楚,很多开发在这一块的体系知识需要得到补充,当然也包括我。无意间,看到一本 日本人写的 《图解http》书,发现里面讲的很细致,并且以图形得方式深度还原http之间的联系,值得推荐,于是好记性不如烂笔头,开始记录吧,本文主要是针对第三章记录,共11章,每个章节都会做详细的讲解

image.png

http报文

用于http交互的信息称为http报文,请求端叫请求报文,服务端叫响应报文,http报文是由多行数据构成的字符串文本。报文通常分为报文首部和报文主体两个板块,两者最初由空行(CR+LF 换行符)来划分,通常,不一定要有报文主体

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

1708478026572.png

1708478066741.png

针对首部字段做一个详细的阐述

  1. 请求行 包含请求方法,请求的URI和http版本
  2. 状态行 包含响应结果的状态码,原因短语和http版本
  3. 首部字段 包含请求和响应的各种条件和属性的各类首部,一般是这四种:通用首部、请求首部、响应首部、实体首部
  4. 其他 可能包含http的RFC里未定义的首部cookie

http传递数据使用编码提升效率

http可以在传递过程中使用数据原貌来传递,但为了提高传输效率,能有效处理大量的访问请求,但是也会消耗更多的CPU资源,

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

报文:是http通信的基本点位,由8位组字节流组成,通过http通信传输 实体:作为请求和响应有效载荷数据被传输,内容由实体首部实体主体组成

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

http传递时为了使报文容量变小(服务器响应进行压缩,客户端进行解压复原),通常需要通过压缩进行处理,常用的内容压缩编码有: gzip, compress,deflate,identity

分割发送分块传输编码

http通信中,请求的编码实体资源还未全部传输完成时,浏览器会无法显示请求的页面,所以在传递大量数据的时,需要把数据进行分割成多块(分块传输编码,chunk),才能让浏览器逐步显示

分块传输编码会将实体主体分成多个部分,每一个块用十六进制标记大小,然后客户端负责解码出来,显示在页面上

http通信多部分对象的集合

比如我们发送邮件时,可以在邮件写入文字并添加多种类型的附件,是因为采用了mime(多用途因特网邮件扩展)机制,它允许多个不同类型的二进制数据以ASCII码字符串编码指明,而http协议也采纳多部分对象结合,多部分对象包含如下:

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

http报文中要使用多对象集合,需要在首部字段加上content-type

获取部分内容的范围请求

以前,用户不能使用现在这种高速的带宽访问互联网,下载一个大图的时候会非常吃力,为了解决这个问题,http采用了range机制,给定一个范围,指定请求的范围,比如: 5000~10000,如果服务器无法响应范围要求,则会返回200,和完整的实体内容

1708480843279.png