HTTP连接

HTTP 1.1 中,持久连接是默认的

  • 可以通过发送 Connection: closed 来表示要断开连接
  • Web服务器可以随时断开连接,不一定要等待 Connection: closed 头部
  • 只有实体部分的长度与相应的 Content-Length 头一致,或者是使用 分块传输编码方式编码的,连接才能持久保持
  • 一个客户端对任意一个服务器或代理只能保持 2条持久连接 防止服务器过载

HTTP 管道化连接

  • 在响应还没到之前,将多条请求放入队列中
  • 必须确认 连接是持久的
  • 做好服务器随时关闭连接的准备,服务器在关闭连接的时候,永远不会知道客户端还有多少数据没发送
  • 副作用:如果发送了一些请求,在收到结果之前,连接关闭了,客户端是无法知道服务器到底接受或处理了多少请求的。
  • 对于GET请求一个静态HTML页面,可以反复执行多次,也不会有什么问题
  • 而其他一些事务,如POST一张订单,是不能重复执行的,不然就会有下多张订单的危险
  • 所以HTTP客户端不应该用管道的方式发送一些有副作用的请求,如POST

关闭连接时应该注意的问题

  • 服务器关闭 输出信道(即向客户端发送数据的信道)总是安全的
  • 客户端会在从其缓冲区读完所有数据后收到一条通知,说明流结束了,它就知道你将连接关闭了
  • 而关闭 输入信道 比较危险
  • 客户端向你已经关闭的输入信道发送数据时会收到服务器操作系统返回的 "TCP连接被对端重置" 的报文,大部分操作系统认为这是很严重的错误,所以客户端的OS会清空缓冲区,如果此前客户端还有数据未从缓冲区取走,就会丢失这部分数据
  • 总之,应用程序应该先关闭输出信道,等待对方关闭其输出信道,然后再关闭输入信道
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,088评论 19 139
  • 1 HTTP连接管理概述 最近重读了《HTTP权威指南》部分章节,结合apache来对部分内容进行印证并记录下来。...
    __七把刀__阅读 4,084评论 1 6
  • Http和Socket连接区别 1、TCP连接 要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能...
    俊俊吖阅读 1,064评论 0 2
  • 《父亲》 时光时光慢些吧,不要再让你变老了。我愿用我一生,换你岁月长留。 每次听到这首歌,无论我在干什么,都总会停...
    阿哈的他阅读 459评论 0 1
  • 近年艾灸盛起的原因 为什么艾灸更适合现代人呢?主要是有以下几个原因: 1,常年吹空调 本来夏天天热,人体就应该发汗...
    熊俊容阅读 298评论 0 0

友情链接更多精彩内容