参考博客:https://www.cnblogs.com/hls-code/p/15015859.html
前言:
HTTP的长连接和短连接本质上是TCP的长连接和短连接。
HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。
当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
【例如获取某一页面的某一资源后还想要获取同一页面的其他资源时,但是此时TCP连接已经关闭,所以需要重新TCP连接,然后才可以请求和响应。】
**而从HTTP/1.1起,默认使用长连接,用以保持连接特性。**使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
原理:
HTTP协议既可以实现长连接,也可以实现短连接。
**在HTTP/1.0中,默认使用的是短连接。**也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端访问的某个HTML或其他类型的web页中包含有其他的web资源,如JavaScript文件、图像文件、CSS文件等,当浏览器每遇到这样一个web资源,就会建立一个HTTP会话。HTTP1.0需要在request中增加“Connection: keep-alive”,header才能够支持长连接。
HTTP1.0 KeepAlive支持的数据交互流程如下:
1)Client发出request,其中该request的HTTP版本号为1.0。同时在request请求头中包含一个header:“Connection: keep-alive”。【在HTTP/1.0的时候必须在请求头上加上Connection: keep-alive这个字段,服务端才会知道这是一个长连接请求】
2)web sever收到request中的HTTP协议为1.0及“Connection: keep-alive”就认为是一个长连接请求,其将在response的header中也增加“Conection: keep-alive”。同时不会关闭已建立的TCP连接。
3)Client收到web server的response中包含“Connection: keep-alive”,就认为是一个长连接,不关闭TCP连接。并用该TCP连接再发送request。(跳转到1))
**但从HTTP/1.1起,默认使用长连接,用以保持连接特性。**使用长连接的HTTP协议,会在请求头和响应头加入这行代码。Connection: keep-alive。
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接(HTTP长连接利用同一个TCP连接处理多个HTTP请求和响应)。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。长连接中关闭连接通过Connection:closed头部字段。 如果请求或响应中的Connection被指定为closed,表示在当前请求或相应完成后将关闭TCP连接。 TCP的keep-alive是检查当前TCP连接是否活着;HTTP的Keep-Alive是要让一个TCP连接活久点。
HTTP1.1 Keep-Alive支持的数据交互流程如下:
1)Client发出request,其中该request的HTTP版本号为1.1。
2)web server收到request中的协议为1.1就认为是一个长连接请求【请求头不需要添加Connection: keep-alive,服务端就认为其请求是长连接】,其将在response的header中也增加“Connection: keep-alive”。同时不会关闭已建立的TCP连接。
3)Client收到 web server的response中包含“Connection:keep-alive”,就认为是一个长连接,不会关闭TCP请求,并用该TCP连接再发送request。(跳转到 1))
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。文章来源:https://www.toymoban.com/news/detail-611800.html
如何在程序中设置
能够在过滤器中加入: response.setHeader(“connection”, “close”);文章来源地址https://www.toymoban.com/news/detail-611800.html
到了这里,关于HTTP的长连接和短连接详解(HTTP 请求头中的Connection字段)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!