写点什么

HTTP 的前世今生

作者:技术小生
  • 2022 年 7 月 11 日
  • 本文字数:1473 字

    阅读完需:约 5 分钟

HTTP的前世今生

HTTP 的起源

HTTPHyperText Transfer Protocol)是万维网(World Wide Web)的基础协议。起源于 CERN 实验室的 Tim Berners-Lee 博士的一篇论文。该论文是关于建立一个通过网络传输超文本的系统。提出了三大关键技术:

  • URL:统一资源标识符

  • HTML:超文本标记语言

  • HTTP:超文本传输协议

该论文的发表标记着 HTTP 的诞生!

HTTP 协议介绍

HTTP 超文本传输协议(HyperText Transfer Protocol)是当今互联网上应用最为广泛的一种网络协议。HTTP 协议规定,在两台计算机之间使用 HTTP 协议进行通信时,在一条通信线路上必定有一端是客户端,另一端则是服务端。当在浏览器中输入网址访问某个网站时, 你的浏览器(客户端)会将你的请求封装成一个 HTTP 请求发送给服务器站点,服务器接收到请求后会组织响应数据封装成一个 HTTP 响应返回给浏览器。


HTTP 版本发展

HTTP/0.9

最早版本是 1991 年发布的 0.9 版。该版本极其简单,只有一个命令 GET。响应也极其简单的:只包含响应文档本身。不包含响应头,无法根据状态码进行区分。


HTTP/1.0

由于互联网的快速发展,HTTP/0.9 大大受限。所以 1996 年,HTTP/1.0 正式发布。

发布内容:

  • 任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。真正实现了超文本传输

  • 除了 GET 命令,还引入了 POST 命令和 HEAD 命令,丰富了浏览器与服务器的互动手段

  • 引入协议版本号的概念

  • HTTP 请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据

  • 增加了状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。


但,真正使用的时候,发现 HTTP/1.0 存在比较严重的问题:

  • HTTP/1.0 版的主要缺点是,每个 TCP 连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

  • TCP 连接的新建成本很高,因为需要客户端和服务器三次握手,并且开始时发送速率较慢。


HTTP/1.1

在半年后,为进一步完善 HTTP 协议,HTTP/1.1 版本发布。

相对于 HTTP/1.0 版本 HTTP/1.1 做了一些优化大致如下:

  • HTTP 1.1 支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在 HTTP1.1 中默认开启 Connection: keep-alive,一定程度上弥补了 HTTP1.0 每次请求都要创建连接的缺点。

  • 增加了 PUT、DELETE 、OPTION 等新的方法

  • 引入额外的缓存控制机制:引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。

  • 允许响应数据分块(chunked),利于传输大文件

  • 增加管道机制:在同一个 TCP 连接里面,客户端可以同时发送多个请求。这样就进一步改进了 HTTP 协议的效率。


HTTP/2

在 Google 的 SPDY 协议的基础上,HTTP/2 诞生。

主要特点:

  • 二进制分帧:HTTP/2 的所有帧都采用二进制编码:HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。

  • 多路复用 (Multiplexing):允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息

  • 请求优先级:将 HTTP 消息分解成多个不同优先级的请求流,优先响应高优先级的请求。

  • header 压缩:客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,不再重复发送 header

  • 服务端推送:服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确地请求,服务端可以提前给客户端推送必要的资源,这样可以减少请求延迟时间。



HTTP/3

未来可期

发布于: 刚刚阅读数: 3
用户头像

技术小生

关注

业务应用架构专家 2019.10.08 加入

主要负责公司内部系统的应用架构设计与落地。擅长Java语言开发,熟悉Python、Shell等。精通K8S等云原生相关技术。

评论

发布
暂无评论
HTTP的前世今生_HTTP_技术小生_InfoQ写作社区