HTTP的长连接和短连接详解(HTTP 请求头中的Connection字段)

参考博客: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协议的长连接和短连接。

如何在程序中设置
能够在过滤器中加入: response.setHeader(“connection”, “close”);

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值