HTTP (Hypertext transfer protocol) 翻译成中文是超文本传输协议,是互联网上重要的一个协议,由欧洲核子研究委员会 CERN 的英国工程师 Tim Berners-Lee v 发明的,同时,他也是 WWW 的发明人,最初的主要是用于传递通过 HTML 封装过的数据 。在 1991 年发布了 HTTP 0.9 版,在 1996 年发布 1.0 版,1997 年是 1.1 版,1.1 版也是到今天为止传输最广泛的版本(初始 RFC 2068 在 1997 年发布,然后在 1999 年被 RFC 2616 取代,再在 2014 年被 RFC 7230 /7231/7232/7233/7234/7235 取代),2015 年发布了 2.0 版,其极大的优化了 HTTP/1.1 的性能和安全性,而 2018 年发布的 3.0 版,继续优化 HTTP/2,激进地使用 UDP 取代 TCP 协议,目前,HTTP/3 在 2019 年 9 月 26 日 被 Chrome,Firefox,和 Cloudflare 支持,所以我想写下这篇文章,简单地说一下 HTTP 的前世今生,让大家学到一些知识,并希望可以在推动一下 HTTP 标准协议的发展 。
HTTP 0.9 / 1.00.9 和 1.0 这两个版本,就是最传统的 request – response 的模式了,HTTP 0.9 版本的协议简单到极点,请求时,不支持请求头,只支持 GET
方法,没了 。HTTP 1.0 扩展了 0.9 版,其中主要增加了几个变化:
- 在请求中加入了 HTTP 版本号,如:
GET /coolshell/index.html HTTP/1.0
- HTTP 开始有 header 了,不管是 request 还是 response 都有 header 了 。
- 增加了 HTTP Status Code 标识相关的状态码 。
- 还有
Content-Type
可以传输其它的文件了 。
- 一个协议有没有版本管理,是一个工程化的象征 。
- header 是协议可以说是把元数据和业务数据解耦,也可以说是控制逻辑和业务逻辑的分离 。
- Status Code 的出现可以让请求双方以及第三方的监控或管理程序有了统一的认识 。最关键是还是控制错误和业务错误的分离 。
但是,HTTP1.0 性能上有一个很大的问题,那就是每请求一个资源都要新建一个 TCP 链接,而且是串行请求,所以,就算网络变快了,打开网页的速度也还是很慢 。所以,HTTP 1.0 应该是一个必需要淘汰的协议了 。
HTTP/1.1HTTP/1.1 主要解决了 HTTP 1.0 的网络性能的问题,以及增加了一些新的东西:
- 可以设置
keepalive
来让 HTTP 重用 TCP 链接,重用 TCP 链接可以省了每次请求都要在广域网上进行的 TCP 的三次握手的巨大开销 。这是所谓的“HTTP 长链接” 或是 “请求响应式的 HTTP 持久链接” 。英文叫 HTTP Persistent connection. - 然后支持 pipeline 网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间 。(注:非幂等的 POST 方法或是有依赖的请求是不能被 pipeline 化的)
- 支持 Chunked Responses,也就是说,在 Response 的时候,不必说明
Content-Length
这样,客户端就不能断连接,直到收到服务端的 EOF 标识 。这种技术又叫 “服务端 Push 模型”,或是 “服务端 Push 式的 HTTP 持久链接” - 还增加了 cache control 机制 。
- 协议头注增加了 Language, Encoding, Type 等等头,让客户端可以跟服务器端进行更多的协商 。
- 还正式加入了一个很重要的头——
HOST
这样的话,服务器就知道你要请求哪个网站了 。因为可以有多个域名解析到同一个 IP 上,要区分用户是请求的哪个域名,就需要在 HTTP 的协议中加入域名的信息,而不是被 DNS 转换过的 IP 信息 。 - 正式加入了
推荐阅读
- 春节的来历是什么20字
- 梦见白马的寓意
- 晚霞行千里的上一句
- 万户捣衣声的上一句
- 目前公认“值得买”的3款好机 现在什么手机值得入手
- 加强手机信号最好的方法 手机信号不好怎么办
- 公认口碑不错的3款国产手机 国产手机哪个牌子好
- 不用的烟道口如何封堵
- 插座接线有三个怎么接
- Steam设置中文方法 英文版的steam怎么设置中文