一个TCP连接可以发送多少个HTTP请求?就这这个问题,我们聊聊TCP、HTTP以及浏览器之间的关系和对请求处理的优化。
TCP与HTTP的渊源
我们知道TCP协议对应于传输层,HTTP协议对应于应用层。WEB项目中,HTTP协议是建立在TCP的基础上的。
最初浏览器从服务器加载一个网页,会发起一个HTTP请求,这时需要先建立一个TCP连接。当本次数据请求完毕之后,会立刻断开TCP连接。
但随着时间的推理,HTML网页内容越来越复杂,不仅有内容,还有JS、CSS和图片资源,每个资源的请求都建立一次TCP连接,效率就会很低。
这时,Keep-Alive就被提出用来了,专门用于解决效率低的问题。
本文关于TCP连接能够发送多少个HTTP请求,本质上就是围绕着解决通信的低效问题的。
下面我们通过几个常见的面试问题,来逐步揭开这其中包含的知识点。
问题一:浏览器建立TCP连接之后,完成一次HTTP请求,是否会断开?
HTTP协议Header中的Connection属性决定了连接是否持久,不同HTTP协议版本有所不同。
HTTP/1.0中Connection默认为close,即每次请求都会重新建立和断开TCP连接。缺点:建立和断开TCP连接,代价过大。
HTTP/1.1中Connection默认为keep-alive,即连接可以复用,不用每次都重新建立和断开TCP连接。超时之后没有连接则主动断开。可以通过声明Connection为close进行关闭。
优点:TCP连接可被重复利用,减少建立连接的损耗,SSL的开销也可以避免。刷新页面时也可以复用,从而不再建立SS