天天看点

HTTP是什么

HTTP 是什么?

HTTP 解决了什么?为什么出现?

假设只有 TCP,没有应用层:

客户端、服务器开发人员制定接口需要定好发送、接收数据的格式。比如服务器执行成功返回 1,执行失败返回 0 等。但是其他服务器的接口格式不一定就是这样,可能返回的执行结果是字符串。所以客户端针对每个系统的接口都需要分别写发送、解析数据的方法。

而 HTTP 就是为了解决这类问题,在应用层给客户端、服务端制定了一个规范。

HTTP/1.1 是什么?跟 1.0 有什么区别?

HTTP 是基于 TCP 的协议,所以连接必须有三次握手、四次挥手。

在 HTTP/1.0,每次做 HTTP 请求,都需要建立、关闭 TCP 连接,即每发送 HTTP 请求就要三次握手、四次挥手。

这样比如打开一个网页,请求 HTML、CSS、JS 等就需要好几个甚至几十个 TCP 连接,所以性能低。这种每次请求就要一个 TCP 连接、返回再关闭 TCP 连接的,叫短连接。

而 HTTP/1.1 为了解决该问题,让多个 HTTP 请求共用一个 TCP 连接,从而减少了不必要的网络请求。

客户端在请求 HTTP header 里设置 Connection: keep-alive,并且服务器返回时也在其 HTTP header 设置 Connection: keep-alive,则使用的 TCP 连接就会继续给其他 HTTP 包使用而不会直接关闭。

这种一直打开 TCP 连接使用的叫长连接。

HTTP/1.1 有什么问题?HTTP/2 解决了什么?

HTTP/1.1 虽然减少 TCP 请求而提高性能,但还是有问题:它的 HTTP 请求是串行的。即客户端每次 HTTP 请求都要先等上一个 HTTP 请求收到服务器返回才能发送。

所以在 HTTP/2 使用了多路复用技术:每个 HTTP 包拆分成多个帧(二进制格式;每个帧都有相关标识),客户端乱序发送这些帧后由服务端来重组成 HTTP 包。这样就能实现 HTTP 请求的并行,从而提高性能。

HTTP/2 又有什么问题?HTTP/3 做了什么?

HTTP/2 由于是基于 TCP 的,所以如果前面一个帧丢失了,那么根据 TCP 协议需要做重发,这样后面的帧就需要等待。所以如果丢包多,可能直接用多个 TCP 连接 + HTTP/1.1 反而性能会更好。

所以为了解决该问题,HTTP/3 改用了 UDP,在应用层自己实现快速又可靠的传输,即出现丢失不会影响其他帧的发送。

其他文章

HTTP 还有其他功能,比如 HTTP/2 的服务端推送、header 压缩,HTTP/3 的加密等等。

从日常开发说起,浅谈HTTP协议是做什么的。

一次网页请求背后的连接

http的长连接和短连接(史上最通俗!)

什么是http2.0?

HTTP3 为什么比 HTTP2 靠谱? | 技术头条

我的HTTP/3学习笔记

继续阅读