谷歌,***等未使用超时的保持活动http标头?

Posted

技术标签:

【中文标题】谷歌,***等未使用超时的保持活动http标头?【英文标题】:Keep-Alive http header with timeout not used by google, ***, etc? 【发布时间】:2016-11-06 11:26:07 【问题描述】:

我开始阅读 Keep-Alive 并正在考虑将其添加到我的网络服务器,但当我跟踪 http://google.com 和 http://***.com 时,我注意到他们根本没有将这个标头发送回客户端(超时是)。

这是为什么呢?我认为通常您想终止空闲超过 20 秒左右的连接。我实际上很好奇其他网站正在使用什么。也许他们最终会超时空闲连接,但只是不告诉客户他们将这样做(这似乎很奇怪)。

我执行了“telnet google.com 80”并等待了大约 2 分钟,它从未超时,然后我发出了“GET / HTTP/1.1”并等待了一些时间,而不是一遍又一遍地输入一堆随机垃圾(不确定他们是否会限制标头大小,所以我认为您“可以”OOM 他们的服务器)。我终于按了两次回车并返回了 200 OK....

谢谢, 院长

【问题讨论】:

【参考方案1】:

在 HTTP/1.1 及以上版本中,keep-alive 是默认设置,除非服务器明确发送“关闭”消息:https://www.rfc-editor.org/rfc/rfc7230#section-6.3,因此无需发送 Connection: keep-alive 标头。

事实上,在 HTTP/2 下,您甚至不允许发送此 Close 标头,因此除了在处理请求后显式关闭连接 [使用 GOAWAY 消息][1] 之外,没有办法不使用 keep-alives ]。

在 HTTP/1.1 下,服务器可以在不告诉客户端的情况下关闭连接。

所以 Google 和 StackExchange 正在使用 keep-alives - 他们只是没有在标题中宣传它。

【讨论】:

我问的更多的是保持活动的超时特性,而不是保持活动本身。谷歌似乎没有使用超时。事实上,我只是在 google.com 端口 80 上做了一个 telnet,它似乎让我永远这样做......这不是一件坏事,因为你可以在太多打开的连接上使用 DOS。他们不超时似乎很奇怪。 是的,因为 HTTP/1.1 在标头中没有明确的超时,但是服务器上会有超时。尝试打开 telnet 会话,您会看到它最终被关闭。不提供时间(无论如何都不能保证)允许服务器处理其他选项(例如,在该连接上发出的最大请求数,来自客户端的最大连接数......等等)。 你一定错过了我的编辑吗? google 和 *** 从未关闭我的连接并保持打开状态。最重要的是,chrome连接有时根本不发送任何请求(我认为准备好接受更多或什么),因为我最终实现了超时功能,但现在我正在考虑将其撕掉,因为chrome连接时没有请求进入有时。

以上是关于谷歌,***等未使用超时的保持活动http标头?的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache2 中删除 http 标头

Worklight 在用户注销时保持 HTTP 请求处于活动状态

服务器响应中的“连接:保持活动”

Socket.io 与 flask-socketio python。如何设置套接字保持活动/超时

UIWebView 捕获响应标头

在保持活动超时时为 Vert.x 邮件发送器重置连接