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

这篇具有很好参考价值的文章主要介绍了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”);文章来源地址https://www.toymoban.com/news/detail-611800.html

到了这里,关于HTTP的长连接和短连接详解(HTTP 请求头中的Connection字段)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • http的长连接、短连接、长轮询、短轮询

    我们都知道,HTTP1.1是可以支持长连接的,并且默认就是长连接。只需要在请求头设置 Connection:keep-alive 。长连接要想起作用,客户端也需要设置 Connection:keep-alive 。 长连接,短连接是针对TCP来说的 ,因为TCP才是负责数据传输的协议,长连接保证的是可以复用TCP连接。 这里就

    2023年04月09日
    浏览(28)
  • 请求头中的Authorization

    header里面放Authorization,就是为了验证用户身份。 Authorization里面放的就是token,就相当于每次发送请求的时候,拦截器都会拦截一次你的请求,来验证请求的token与储存的token是否是一致的。 如果一致会把当前请求放行, 如果不一致那么服务器会截断你的请求并把错误码返给

    2024年02月03日
    浏览(33)
  • rpc项目中的长连接与短连接的思考

    对于rpc项目,在接受大佬指导的时候曾问过对于长连接和短连接是处理处理的,在面试的时候也被问起 socket 是长连接还是短连接,发现自己没有好好思考过这个问题,因此好好总结一下。 前置知识点:rpc基础,tcp基础 类似于http的长连接和短连接的概念,rpc项目中的短连接

    2024年02月08日
    浏览(32)
  • 前端下载后端返回的文件流,取请求头中的文件名称

    但是用上面的方法发现只能顺利下载文件, res.headers[\\\"content-disposition\\\"] 取不到后端给前端返回的请求头。 通过问题排查发现: 如图,前端需要取的 res.headers 和 res.data 是一层的,当拦截器中返回 res.data 后,就取不到外层的 headers, 因此前端要自己写 axios 请求方法 但是前端依

    2024年02月01日
    浏览(34)
  • 【Angular中的HTTP请求】- HttpClient 详解

            大多数前端应用都要通过 HTTP 协议与服务器通讯,才能下载或上传数据并访问其它后端服务。Angular 给应用提供了一个 HTTP 客户端 API,也就是 @angular/common/http 中的 HttpClient 服务类。         要想使用 HttpClient ,就要先导入 Angular 的 HttpClientModule 。一般都是在根

    2024年02月08日
    浏览(31)
  • HTTP 请求头部字段中 connection - keep-alive 的含义

    我们经常可以在 Chrome 开发者工具 network 标签页里,观察到 HTTP 请求的 request headers 字段,包含 Connection 等于 keep-alive 这样的值。 上图是 SAP Spartacus UI 向后台 Commerce Cloud 服务器发起的 OCC API 调用。 启用 Keep-Alive 有助于优化网站的性能并提供更好的用户体验。 它允许访问者的

    2024年02月15日
    浏览(35)
  • TCP长连接和短连接

    TCP在真正的读写操作之前,server 与 client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立通过三次握手,释放则需要四次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的。 模拟一种TCP短连接的情况: clie

    2024年02月15日
    浏览(23)
  • nginx(二十七)长连接和短连接

    一    长连接和短连接 概念 长连接和短连接的形象比喻  二    nginx 如何做到 长连接 ①    client 和 nginx  保持长连接 1)keepalive_timeout 2)keepalive_requests    了解keepalive_disable即可 3) keepalive_timeout 和 keepalive_request 关系 ②    nginx保持和 后端 服务器[ 上游、源站 ]的长连接

    2024年02月07日
    浏览(30)
  • Vue项目将token添加到请求头中

    1.调用后端登录接口获取token(我这里是将登陆接口封装在vuex中) 2.创建request.js文件,封装axios 3.在main.js中引入request.js,将其绑定到Vue原型链上

    2024年02月11日
    浏览(28)
  • C# 使用Socket实现长链接和短连接

    直接上代码 服务端: 客户端:  

    2024年02月16日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包