如何判断HTTP响应结束(何时可关闭HTTP连接)

这篇具有很好参考价值的文章主要介绍了如何判断HTTP响应结束(何时可关闭HTTP连接)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何判断一个HTTP连接的结束?

case 1:有Content-Length

依据Content-Length判断接收数据完成,来结束连接。

case2: 请求头带Connection字段

2.1 close

表明客户端或服务器想要关闭该网络连接,这是 HTTP/1.0 请求的默认值。

由server负责主动关闭。

2.2 keep-alive

表明客户端想要保持该网络连接打开,HTTP/1.1 的请求默认使用一个持久连接。

由server负责主动关闭。

case3:chunked响应

3.1 终止块

HTTP/1.1 200 OK

Content-Type: text/plain

Transfer-Encoding: chunked

7\r\n

Mozilla\r\n

9\r\n

Developer\r\n

7\r\n

Network\r\n

0\r\n

\r\n

终止块是一个长度为0的分块,即其是0后面跟着两个CRLF。没有Trailer,则可以认为结束。(但chunk内容可能是二进制,所以不能直接匹配最后的两个CRLF,需要先匹配每个chunk的长度,然后再偏移,逐步找到最后结束。

3.2 有trailer

HTTP/1.1 200 OK

Content-Type: text/plain

Transfer-Encoding: chunked

Trailer: Expires

7\r\n

Mozilla\r\n

9\r\n

Developer\r\n

7\r\n

Network\r\n

0\r\n

Expires: Wed, 21 Oct 2015 07:28:00 GMT\r\n

\r\n

如果携带了trailer(消息头中可以搜索到Trailer字段),则在终止块(此时是单个CRLF)后,还需要再寻找一个结束符(两个CRLF)。处理完Trailer之后,可以认为结束。

Trailer头中绝不能有以下三个字段:

      . Transfer-Encoding

      . Content-Length

      . Trailer

case4:  range请求

4.1 206 Partial Content响应

4.1.1 包含一个区间

有Content-Range,但Content-Type中没有multipart。有Content-Length且是resp的完整长度。可以依据content-length来判断结束并做close。

HTTP/1.1 206 Partial Content

Content-Range: bytes 21010-47021/47022

Content-Length: 26012

Content-Type: image/gif

4.1.2包含多个区间

Content-Type中指明了multipart/byteranges

HTTP/1.1 206 Partial Content

Accept-Ranges: bytes

Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5

Content-Length: 385

--3d6b6a416f9b5

Content-Type: text/html

Content-Range: bytes 100-200/1270

eta http-equiv="Content-type" content="text/html; charset=utf-8" />

    <meta name="vieport" content

--3d6b6a416f9b5

Content-Type: text/html

Content-Range: bytes 300-400/1270

-color: #f0f0f2;

        margin: 0;

        padding: 0;

        font-family: "Open Sans", "Helvetica

--3d6b6a416f9b5--

如何判断结束?

1. 要判断是multipart/byteranges,然后获取到boundary

Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5

2. 利用“--boundary”分割每个部分(每个部分内容还有content-range字段标识长度)

最后一个boundary之后,如何判断结束???

在协议层无法判断结束,只能在业务层(比如数据本身是结构化的,可判断结束的)判断。

问题

1、Transfer-Length和Content-Length不能同时出现?

Transfer-Length不是HTTP头字段?是表达动态长度的?

2、Transfer-Length和Transfer-Encoding一定同时出现?

总结

1、有Transfer-Encoding字段(其值不是identity),则Content-Length字段被忽略。

2、一个HTTP请求,如果有消息体,但没有Content-Length,那么server就应该回复400。

If a request contains a message-body and a Content-Length is not given, the server SHOULD respond with 400 (bad request).

3、Transfer-Encoding vs Content-Encoding

Transfer-Encoding 是一个逐跳传输消息首部,即仅应用于两个节点之间的消息传递,而不是所请求的资源本身。要将压缩后的数据应用于整个连接,要使用端到端传输消息首部 Content-Encoding 。文章来源地址https://www.toymoban.com/news/detail-524917.html

到了这里,关于如何判断HTTP响应结束(何时可关闭HTTP连接)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 关于如何解决Windows10任务栏无响应问题及任务栏“咨询和兴趣”功能入口彻底关闭

    作为一名IT小白,在前阵子重装旧笔记本系统的时候,碰上一个非常奇怪的问题。新装的Windows10系统(这里吐槽一下Windows11,果里果气的,而且操作逻辑用着很不顺手)在刚进入系统时,会出现任务栏无响应,鼠标放上去一直转圈的情况。这我就很纳闷了啊,我以为是我为了

    2024年02月07日
    浏览(91)
  • Java EE 网络原理之HTTP 响应详解

    表示了这次请求对应的响应,是什么样的状态 (成功,失败,其他的情况,对应的原因…) 这里的状态码非常多,我们需要了解里面常见的状态码 2XX 都表示 成功 200 最常见 3xx 表示 重定向 请求中访问的是 A 这样的地址,响应返回了一个重定向报文,告诉你应该要访问 B 地

    2024年02月03日
    浏览(30)
  • 网络连接不可用修复本地连接后窗口不能关闭的解决办法

    修复本地连接,弹出的窗口经常关不掉怎么办啊?单击取消按钮不起作用怎么办?如图: 1、当点击电脑右下角的网络连接时,经常会出现修复弹出框,然后就无法关掉。 第一个解决方法 :调出任务管理器——结束explorer.exe进程,然后“应用程序”选项卡——新任务——输入

    2024年02月07日
    浏览(30)
  • 网络爬虫-----http和https的请求与响应原理

      目录 前言 简介 HTTP的请求与响应 浏览器发送HTTP请求的过程: HTTP请求主要分为Get和Post两种方法 查看网页请求 常用的请求报头 1. Host (主机和端口号) 2. Connection (链接类型) 3. Upgrade-Insecure-Requests (升级为HTTPS请求) 4. User-Agent (浏览器名称) 5. Accept (传输文件类型) 举例: 6. Ref

    2024年02月07日
    浏览(34)
  • 网络爬虫——HTTP和HTTPS的请求与响应原理

    目录 一、HTTP的请求与响应 二、浏览器发送HTTP请求的过程 三、HTTP请求方法 四、查看网页请求 五、常用的请求报头 六、服务端HTTP响应 七、常用的响应报头 八、Cookie 和 Session 九、响应状态码 十、网页的两种加载方法 十一、认识网页源码的构成 十二、爬虫协议 在如今这个

    2024年02月08日
    浏览(28)
  • 如何减少 HTTP 响应的数据大小

    资料来源 : 小林coding 小林官方网站  : 小林coding (xiaolincoding.com) 对于 HTTP 的请求和响应,通常 HTTP 的响应的数据大小会比较大,也就是 服务器返回的资源会比较大 。 于是,我们可以考虑对响应的资源进行 压缩 ,这样就可以减少响应的数据大小,从而提高网络传输的效率。

    2024年02月21日
    浏览(25)
  • Python处理HTTP响应的常用技巧:驯服网络野兽的艺术

    在网络世界里,HTTP响应就像是一只难以捉摸的野兽。它时而温顺,提供你想要的数据;时而暴躁,给你一个404或500的错误码。作为Python程序员,我们的任务就是驯服这只野兽,从中提取出有价值的信息。今天,就让我们来探讨一下驯服网络野兽的常用技巧吧! 1. 捕获响应内

    2024年02月20日
    浏览(28)
  • 如何获取HTTP请求时间与响应时间【附源码】

    今日遇到了一个问题,要去获取HTTP报文在 请求 和 响应 的时间,因为没有原生的API可以调用,所以需要一定的技巧~ 下面主体的框架和代码,我使用了form表单去构造一个POST请求,然后在Servlet中重写doPost()方法,然后实现获取请求时间和响应时间的代码逻辑 我们可以先去观察

    2024年02月08日
    浏览(48)
  • Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应

    Qt 网络编程是使用 Qt 框架进行网络应用开发的重要组成部分。Qt 是一个跨平台的 C++ 应用程序开发框架,广泛应用于各种领域,包括桌面应用、移动应用和嵌入式设备。在本文中,我们将探讨 Qt 网络编程的优势,以及本文涉及的主题,包括 URL、HTTP、服务发现和请求响应等。

    2023年04月23日
    浏览(38)
  • Python运行selenium程序执行结束后自动关闭浏览器 解决方法 亲测有效

    最近朋友在学Selenium的时候遇到一个问题,当执行完selenium程序后,浏览器会闪退也就是自动关闭,程序中也没有写driver.quit()或driver.close()方法,解决后发布上来以供学习交流。 内容比较简单,这里直接附上代码: (1)修改前 (2)修改后:

    2024年02月11日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包