2016-07-04 21 views
1

我开始阅读关于Keep-Alive并正在考虑将其添加到我的网络服务器,但当我追踪http://google.comhttp://stackoverflow.com时,我注意到他们根本没有发送这个头文件给客户端(这是一个超时)。Keep-Alive带有超时的http头没有被谷歌,stackoverflow等使用?

这是为什么?我通常会认为你想杀掉已经闲置超过20秒左右的连接。其实我很好奇其他网站正在使用什么。也许他们最终会暂停闲置连接,但不要告诉客户他们会这样做(这看起来很奇怪)。

我做了一个“telnet google.com 80”,等了大约2分钟,它从来没有超时,然后我发出了一个“GET/HTTP/1.1”,并等待输入一堆随机垃圾, (不确定它们是否会限制标题大小,所以你可以'OOM他们的服务器,我认为)。我终于进入了两次,并收回了200 OK ....我的头文件没有任何格式正确,但谷歌似乎并不在意(奇怪)。

感谢, 院长

回答

0

在HTTP/1.1及以上的保活是默认的,除非服务器明确发送“关闭”消息:http://tools.ietf.org/html/rfc7230#section-6.3所以没有必要送Connection: keep-alive头。

事实上,在HTTP/2下你甚至不允许发送这个Close头,所以没有办法不使用保持链接,除非在请求被处理之后显式关闭连接[使用GOAWAY消息] [ 1]。

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

所以Google和StackExchange都在使用keepalive--他们只是没有在头文件中做广告。

+0

我在询问更多关于保持活着的超时功能的信息。它似乎谷歌没有使用超时。事实上,我只是通过telnet到google.com的80端口,似乎只是让我这样做,永远.....不是一件坏事,因为你可以在太多的开放连接上DOS。看起来很奇怪,他们没有时间。 –

+0

是因为HTTP/1.1没有在头文件中给出显式超时,但是在服务器上会有一个超时。尝试离开telnet会话,你会看到它最终被关闭。没有提供一个时间(永远不能保证)允许服务器处理其他选项(例如,在该连接上进行的最大请求,来自客户端的最大连接等)。 –

+0

你一定错过了我的编辑?谷歌和stackoverflow从未关闭我的连接,并将其打开。最重要的是,chrome在没有发送任何请求的情况下连接(有时候我想为更多或者其他东西做好准备),因为我最终实现了一个超时功能,但现在正在考虑将其重新取出,因为chrome连接时没有请求进入有时。 –

相关问题