文章插图
我们可以看到 , 到目前为止 , 关于HTTP的第一份文档就是在1996年五月份的这份RFC1945 , 它在最开始有这么一段话:
This memo provides information for the Internet community.This memo does not specify an Internet standard of any kind.Distribution of this memo is unlimited.大致意思就是说 , 这个备忘录提供了一些关于在网络上通信的讨论 。并且本备忘录不定义任何类型的互联网标准,并且本协议允许随意传播 。然后 , 我们还可以在下面的文章内容中找到一个关于RFC1945所囊括的范围是什么的一句话:
This document defines both the 0.9 and 1.0 versions of the HTTP protocol.本文档定义了0.9和1.0两个HTTP版本 。换句话说,在RFC1945中,也就是到了HTTP1.0的时候 , 才真正的形成了一份类似文档的备忘录 , 但是,它还算不上是标准 。可以从文档内容看得出来1.0比0.9多了好多好多东西 。
HTTP/1.1:我是真标准而随着互联网的继续发展,网景的 Netscape Navigator 和微软的 Internet Explorer 开始了著名的“浏览器大战”,都希望在互联网上占据主导地位 。这场大战的商业意义和纠纷我们暂且不提 , 但是它确实,实实在在的推动了Web的发展,在1999年,HTTP1.1版本正式出现,此刻的HTTP协议才算是一个真正的标准,所有要用到HTTP的应用或者设备都必须遵守该协议 。
那我想问你个问题 , 基于RFC的文档,是直接从1.0就到了1.1么?中间没有别的了?首先1.0版本的RFC编号是1945,而1.1版本的编号想必大家耳熟能详就是2616,当然RFC可不仅仅只是为HTTP服务的,所以通过编号的跨度好像也不能解答我上面的问题 。
但是,这张图可以:
文章插图
从上图我们着重看一下RFC1945、RFC2068、RFC2616,换句话说,当1.0版本的备忘录出现之后,到RFC2616的1.1版本 , 中间还有个RFC2068,当然,我们从上图中也可以看到RFC2068已经被RFC2616覆盖了,并且2616也被7230等后续文档所完善和覆盖 。
而且,在某一个文档真正标准化之前,实际上还有很多关于某些特性的讨论,不多说,大家有兴趣可以在文末的连接中自己取证 。
HTTP1.1在原有的HTTP1.0的基础上做了不少的性能改进,虽然说是一个小范围的改变,但是这些改变所带来的影响可不小 。我们下面就就简单的看看HTTP1.1相对于1.0版本都做了哪些核心的优化 。
1、增加持久连接HTTP/1.0每进行一次HTTP通信,都需要经历建立连接、传输数据、断开连接的操作 。换句话说,我发送一点点HTTP数据,就要额外的发送十几个包,后面我会用实际的过程带大家看为啥会是十几个包 。这实在是有点难受 。
但是为啥当时这样就可以呢?因为当时传输数据的体积小,页面也没啥引用的外部连接,全是HTML文本,所以也不会有什么太大的问题,但是随着发展,页面的体积和引用越来越大,这种方式显然已经无法支撑日益发展的需求了 。
那么HTTP/1.1为了解决这个问题,增加了持久连接的方法,它的特点是在一个TCP连接上可以传输多个HTTP请求,只要浏览器或者服务器没有明确断开,那么TCP连接就会一直保持 。
持久连接在HTTP/1.1中是默认开始的,如果你不想开启持久连接 , 可以在HTTP的请求头中加上Connection:close 。
目前浏览器中对同一个域名,默认允许同时建立6个TCP持久连接,注意!是浏览器默认允许 。
2、不成熟的HTTP管线化我们想象一下,在TCP这条马路上,只能一条单行道 , 所有跑在这条马路上的车都无法超越前面的车,假如前面的车追尾了,后面所有的车都只能等待前面的事故处理完才能继续同行 。
换句话说,假如前一个HTTP请求因为某些原因没有返回结果,那么就会阻塞后面所有的请求,这就是著名的队头阻塞问题 。
在HTTP/1.1中,试图通过管线化的技术来解决队头阻塞的问题,在HTTP/1.1中的管线化,会将多个HTTP请求整批提交给服务器的技术 , 也就是说,虽然马路还是单行道 , 但是我可以把车叠在一起,一下子发送一批 。但是马路上跑的时候可以这样,到了收费站,你还是要下来挨个排队收费 。
3、支持虚拟主机在HTTP/1.0中 , 每个域名绑定了一个唯一的IP地址,因此一个服务器只能支持一个域名 。但是随着虚拟主机技术的发展,需要实现在一台物理主机上绑定多个虚拟主机 , 每个虚拟主机都有自己单独的域名,这些单独的域名都公用同一个IP 。
推荐阅读
- Substring 在BCL和CLR里面搞了啥
- JAVA开发搞了一年多的大数据,究竟干了点啥
- 用 VS Code 搞 Qt6:让信号和槽自动建立连接
- 奥比岛:梦想国度真正被频繁投诉的是哪支施工队答案是什么
- 《英雄联盟》游戏中“烬”的大招怎么放(英雄联盟烬开大怎么取消)
- 樱桃的拼音正确读音-“樱桃”怎么读?
- 清除浏览器缓存怎么操作(如何真正清除手机缓存)
- 有油款 “倩碧黄油”——————真假辨别 上次的兰蔻粉水鉴别方法已经分享过了
- 河北首家城商行传统核心业务国产化,TDSQL突破三“最”为秦皇岛银行保驾护航
- 新耳机“煲机”真的有用吗该怎么“煲“呢(tws耳机需要煲机吗)