带你看透HTTP协议

Posted 小道视野

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你看透HTTP协议相关的知识,希望对你有一定的参考价值。

HTTP 协议,几乎是每个人上网用的第一个协议
例如说看新闻,你会在浏览器里键入http://www.163.com。http://www.163.com 是个 URL,叫作统一资源定位符,有统一的一个格式。

HTTP请求阶段


HTTP请求的构建


建立连接以后,浏览器就要发送请求了
请求的格式如下:



HTTP报文分为3部分

1. 请求行
请求行包括URL,HTTP版本,以及请求方法等


2. 首部的字段
首部是 key value,通过冒号分隔
例如,Accept-Charset,表示客户端可以接受的字符...

例如,Accept-Charset,表示客户端可以接受的字符集。防止传过来的是另外的字符集,从而导致出现乱码。

再如,Content-Type是指正文的格式。例如,我们进行POST 的请求,如果正文是 JSON,那么我们就应该将这个值设置为 JSON。

3.实体
实体部分就是请求的一些参数


HTTP请求的发送


HTTP 协议是基于 TCP 协议的,所以它使用面向连接的方式发送请求,通过 stream 二进制流的方式传给对方。当然,到了 TCP 层,它会把二进制流变成一个的报文段发送给服务器。

TCP 头里面还有端口号,HTTP 的服务器正在监听这个端口号。于是,目标机器自然知道是 HTTP 服务器这个进程想要这个包,于是将包发给 HTTP 服务器。HTTP 服务器的进程看到,原来这个请求是要访问一个网页,于是就把这个网页发给客户端。

HTTP响应的构建


响应的结构跟请求的结构差不多
其中状态码会反应 HTTP 请求的结果。“200”意味着大吉大利;而我们最不想见的,就是“404”,也就是“服务端无法响应这个请求”。

在返回的头部里面也会有Content-Type,表示返回的是 html,还是 JSON。

这些段加上 TCP 头后会交给 IP 层,然后把刚才的发送过程反向走一遍。虽然两次不一定走相同的路径,但是逻辑过程是一样的,一直到达客户端。

当浏览器拿到了 HTTP 的报文。发现返回“200”,一切正常,于是就从正文中将 HTML 拿出来。HTML 是一个标准的网页格式。浏览器只要根据这个格式,展示出一个绚丽多彩的网页。

HTTP2.0

HTTP 1.1 在应用层以纯文本的形式进行通信。每次通信都要带完整的 HTTP 的头,而且不考虑 pipeline 模式的话,每次的过程总是像上面描述的那样一去一回。这样在实时性、并发性上都存在问题。

为了解决这些问题,HTTP 2.0 会对 HTTP 的头进行一定的压缩,将原来每次都要携带的大量 key value 在两端建立一个索引表,对相同的头只发送索引表中的索引。

另外,HTTP 2.0 协议将一个 TCP 的连接中,切分成多个流,每个流都有自己的 ID,而且流可以是客户端发往服务端,也可以是服务端发往客户端。它其实只是一个虚拟的通道。流是有优先级的。

HTTP 2.0 还将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。常见的帧有Header 帧,用于传输 Header 内容,并且会开启一个新的流。再就是Data 帧,用来传输正文实体。多个 Data 帧属于同一个流。

通过这两种机制,HTTP 2.0 的客户端可以将多个请求分到不同的流中,然后将请求内容拆成帧,进行二进制传输。这些帧可以打散乱序发送, 然后根据每个帧首部的流标识符重新组装,并且可以根据优先级,决定优先处理哪个流的数据。

假设我们的一个页面要发送三个独立的请求,一个获取 css,一个获取 js,一个获取图片 jpg。如果使用 HTTP 1.1 就是串行的,但是如果使用 HTTP 2.0,就可以在一个连接里,客户端和服务端都可以同时发送多个请求或回应,而且不用按照顺序一对一对应。


HTTP 2.0 其实是将三个请求变成三个流,将数据分成帧,乱序发送到一个 TCP 连接中。


HTTP 2.0 成功解决了 HTTP 1.1 的队首阻塞问题,同时,也不需要通过 HTTP 1.x 的 pipeline 机制用多条 TCP 连接来实现并行请求与响应;减少了 TCP 连接数对服务器性能的影响,同时将页面的多个数据 css、js、 jpg 等通过一个数据链接进行传输,能够加快页面组件的传输速度。


以上是关于带你看透HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

八分钟由浅入深,专家带你理性认识HTTP协议

带你走进神秘的HTTP协议

轻松易懂,一文带你http协议入门?

前端 | 老司机带你了解 HTTP 协议

一文带你了解什么是HTTP协议

一篇文章带你详解 HTTP 协议之报文首部及字段详解(中)