新梦想干货——网络情缘之传说中的HTTP协议(一)

在新梦想动态的前面三篇文章:

<网络情缘之如何上网的>

<网络情缘之TCP的三次握手和四次分手>

<网络情缘之TCP的分包处理>

里我们都说提到一个词HTTP,

今天我们来看看传说中的HTTP协议吧。

自打有了互联网,每天开始看新闻,看朋友圈,刷微博等等,HTTP都起着非常关键的作用,大部分的数据都是靠HTTP协议送到你的面前的。So,HTTP有着怎么样的前世今生呢?

HTTP协议是谁?

HTTP协议全名:Hyper Text Transfer Protocol。

中文名字:超文本传输协议。

他基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80。目前主流的协议版本是HTTP1.1。

新梦想软件测试

扒一扒HTTP协议的历史:

1、HTTP/0.9版本 出生年份:1991年

非常简单的一个版本,只有一个get命令,服务器向客户端响应一个HTML页面,只能是文本格式的。就是说你看到的页面全是字,没有图片和视频。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7N1xWQnx-1573203745474)(http://www.hnxmxit.com/Uploads/201812/5c26d99a1811a.png)] 新梦想软件测试

2、HTTP/1.0版本 出生年份:1996年

这个版本就强大许多了,你上网的时候可以看到图片和视频了。这是因为该版本的协议增加了Content-Type字段,允许数据包body部分的内容可以是任何数据类型。服务器在响应数据时必段告诉客户端数据类型是什么格式的,这才是content-type存在的意义。

Content-type的字段值有很多,这些都是数据返回的类型,这些数据类型总称为MIME type,每个值包括一级类型和二级类型,之间用斜杠分隔。

常用的有以下这些:

新梦想软件测试

请求的方式增加了post和head。也规定了字符集(charset)、响应状态码、权限。但是他有一个大的缺点:每请求一次数据就要TCP创建一次连接(上一篇说过HTTP协议采用TCP连接方式),传输完就断开。如果一个网页有100张图的话,那TCP得握手100次,想想手都要断了。

所以有些为了避免这个问题,就在请求的时候使用connection:keep-alive字段,来要求服务器不要关闭连接。服务器响应的时候,同样会有这样的字段回复。

3、HTTP/1.1版本 出生年份:1997年

这个版本的协议也是当前主流的协议版本了。

作为现代人的你,还在用10年前的东西,是不是觉得前辈们的技术很强大。

该版本最大的优点就是增加了持久化连接,也就是说TCP连接完后,先不关闭,可以被多个请求重复使用。直到客户端或者服务器发现数据交互完成,不需要了再来进行连接关闭。

新梦想软件测试

这里提个问题,请问:现在的主流浏览器针对同一个域名最多允许的持久化连接是多少个呢?

虽然现在可以多个请求使用一个连接了,但是势必就要搞清楚不同的数据包是哪个响应的。所以在这里又增加了content-length字段,告诉客户端这个响应的数据是多少字节。如果超过这个数字了,那就是下一个请求的响应数据了。

新梦想软件测试

4、HTTP /2 出生年份:2015年

为啥不叫2.0,因为标准委员会不打算再发布子版本了,如果有下一个新版本那他的名字将是HTTP/3。嗯,有点任性了啊。

HTTP/2很强大,增加了很多新技能,为了以后做的准备,这里就不都详细介绍了。就简单介绍一个词:“多工(Multiplexing)”。

HTTP/2允许客户端和服务器同时发送多个请求或响应,而且还不要求按顺序一一对应,这么做的目的是为了避免阻塞。

就比如你和朋友一起去餐馆吃饭,同时跟你进餐厅的有好几桌人,这些桌都点了餐,那厨师如果一桌一桌的来炒菜的话,估计有些桌的人得拍桌子走人了。这时厨师会同一个时间掌勺两三个锅,而且如果有些桌的菜比较难处理的话,那厨师会先炒出两三个菜,然后炒完其他比较简单的菜再回来继续炒原先桌的菜了。这样既安抚了你们,也解决了其它桌的问题。

在这里插入图片描述

HTTP/2的双工就是这样的:服务器可能会同时收到A和B两个请求,服务器先处理A请求,如果A请求比较难处理的话,服务器会把已经处理过的A请求数据发给客户端,然后来处理B请求,完了以后再回头处理A请求。

好了,下周继续!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章