当前位置: 首页 > 知识库问答 >
问题:

解释http保活机制

陶成化
2023-03-14

在HTTP中添加了keep-alive,以基本上减少为每个新请求快速创建和关闭套接字连接的大量开销。以下是它在HTTP1.0和1.1中的工作方式的总结:

HTTP1.0规范并没有真正深入研究Keep-Alive应该如何工作。基本上,支持Keep-Alive的浏览器会在请求中附加一个额外的标题,如下所述[为清晰起见而编辑]:

当服务器处理请求并生成响应时,它还会向响应添加一个标头:

据我所知,我们只是发送tcp数据包来发出请求和响应,这个套接字连接如何帮助以及它是如何工作的?我们仍然要发送数据包,但它如何以某种方式建立持久连接?看起来太不真实了。

共有1个答案

崔宇
2023-03-14

建立新的TCP连接(DNS查找、TCP握手、SSL/TLS握手等)会有开销。如果没有keep-alive,每个HTTP请求都必须建立一个新的TCP连接,然后在发送/接收响应后关闭连接。keep-alive允许对多个请求/响应重用现有TCP连接,从而避免所有开销。这就是连接“持久”的原因。

在HTTP0.9和1.0中,默认情况下,服务器在向客户端发送响应后关闭TCP连接的末端。客户端必须在收到响应后关闭其TCP连接的一端。在HTTP1.0中(但在0.9中没有),客户机可以通过在请求中包含connection:keep-alive标头显式地要求服务器不要关闭连接的一端。如果服务器同意,它将在响应中包含连接:keep-alive标头,并且不关闭连接的末端。然后,客户端可以重用相同的TCP连接来发送其下一个请求。

在HTTP 1.1中,keep-alive是默认行为,除非客户端通过在其请求中包含connection:close标头显式地要求服务器关闭连接,或者服务器决定在其响应中包含connection:close标头。

 类似资料:
  • HTTP/1.1服务器默认为连接头的保持活动设置。那么,为什么大多数浏览器在其请求中都包含Connection:Keep-Alive,即使它们知道目标服务器支持HTTP/1.1?

  • 我目前正在开发一个支持保活连接的多线程代理服务器。在处理来自火狐浏览器的请求时,我看到了一些奇怪的问题。我使用localhost:10001/http://url连接到我的本地代理,我可以访问这个主机上的所有链接。过程如下。1.创建一个套接字,将其绑定到端口10001 2.接受连接,如果客户端连接了fork()3.继续将客户端请求处理为持久连接。 现在的问题是,当我在Firefox中打开一个新选项

  • 所以HTTP。1版本及以上版本支持持久性连接。 现在,我们正在创建一个Rest应用程序,它应该是无状态的。我们一次限制连接的数量。 但如果我仔细阅读HTTP1.0文档,这种方法似乎有问题。 它说服务器将保持连接打开,除非客户端说关闭。 所以,我的问题是如果客户端没有关闭怎么办?如果连接始终处于活动状态,它可能会给我拒绝服务错误。 什么是jetty的默认超时,我如何配置它?我无法找到合适的留档。

  • 我正忙着在嵌入式平台上实现自己的超文本传输协议服务器。从技术上讲,服务器符合HTTP 1.0,因此它希望客户端发送标头“连接:保持活着”以保持连接打开。 实现如下所示。我删除了解析HTTP头并执行请求的代码,以使帖子尽可能简短: Get_Request函数如下所示: 用英语描述这个服务器的工作方式:服务器接收第一个请求。它解析报头,如果发现“连接:保持活动”报头,它设置一个标志。服务器继续处理这个

  • 本文向大家介绍请解释下setTimeout的运行机制相关面试题,主要包含被问及请解释下setTimeout的运行机制时的应答技巧和注意事项,需要的朋友参考一下 setTimeout()是异步方法,其内部的代码,要等到本次执行的所有同步代码执行完以后,才会执行。js代码自上而下逐行执行,当执行到setTimeout()时,会将其挂起,设置的延时结束后,会把setTimeout()放入任务队列中,当执

  • 最近我一直在努力优化一些代码(在计算时间和所需的最大内存方面)。为了知道优化内存成本是否有潜在收益,我使用JProfiler。通常 如果它很高,我应该尝试在全球范围内降低它 如果它是尖形的,我应该尽量减少中间对象的创建 现在,我处于第二种情况,气相色谱活动图显示峰值,但都小于2%(见下图)。我应该如何理解? 默认情况下,我的理解是GC活动曲线的和/积分是用于收集数据的cpu总百分比的估计。这意味着