大家都知道HTTP是超文本传输协议,我们通过HTTP可以浏览到网页,获取很多的知道,但是可能很多人不知道更深层的一些知识,今天我就跟大家分享一下HTTP协议的深入解析。
HTTP流程
客户端 服务器
=============================》》
通过URL查找到服务器
《《=====================》》
建立TCP连接
========================》》
发送HTTP报文请求
《《=====================
返回报文
《《======================》》
释放TCP链接
通过流程图我们可以知道HTTP是建立于TCP协议的基础之上的,HTTP是比TCP高级的协议。
HTTP本身是没有状态的,我们平时可以登录账号密码,保持登录状态是借用了其他机制,可以看我的其他博客,介绍cookie和session的。
HTTP协议的发展
HTTP1.0
HTTP本身是没有协议的,双方保持连接是靠TCP连接,所以每次传输文件的时候,TCP都是要保持连接的,当文件传输完的时候,TCP协议释放,浏览器和服务器就没有连接了,彼此独立,服务器就可以释放内存。
我们可以看到,在客户端与服务器连接的过程中,其实发送了两个请求,占用了两个请求时间。
在HTTP1.0中,客户端收到文档后,TCP协议就会立刻停止。
问题来了,
如果我们在index.html引入本地的图片,那么按照1.0的协议,我们会先返回index.html这个文档,断开TCP,然后重新去连接TCP协议,重新请求图片资源,然后再断开TCP资源,如果我们一个首页有很多图片,这样就浪费了很多TCP连接建立的时间。于是1.1协议来了。
HTTP1.1
在HTTP1.1中,引入了长连接的概念,也就是说,我们建立了TCP协议后,我们先请求了index.html之后,我们不着急断开连接,直接发送HTTP报文请求,请求返回a.jpg的图片,直到同一台服务器的所有资源全部返回了,然后才断开TCP连接。这样就可以减少很多TCP连接的时间。
注:如果index文件加入了
<link href="www.baidu.com/1.jpg">
这种其他服务器上的资源,依然会建立多个TCP连接,TCP的长连接仅仅针对于同一台服务器。
大家如果非常有兴趣的话,可以用wireshark之类的抓包软件,抓取HTTP的包,查看一下连接的过程。
HTTP报文格式