如何强制HTTP2客户端重新连接到服务器?

时间:2017-03-06 14:25:13

标签: server-side http2 reconnect

需要进行HTTP2响应,这将强制客户端重新连接到同一服务器到同一地址。

如果是HTTP / 1.1,可以使用307 Temporary Redirect标题发送Connection: close响应。

在HTTP / 2中Connection: close标头被忽略,重定向无需重新连接,这会导致重定向循环错误。

此外,我已尝试使用相同的网址向客户发送421 Misdirected Request响应,但Chrome浏览器在收到此回复后无效。

强制HTTP / 2客户端重新连接的最正确方法是什么?可以发送哪个服务器响应?也许某种GOAWAY框架?

3 个答案:

答案 0 :(得分:2)

遵循RFC 7540建议的正常关闭过程应该导致重新连接:

  

尝试正常关闭连接的服务器   应该发送一个带有最后一个流标识符的初始GOAWAY帧   设置为2 ^ 31-1和NO_ERROR代码。这向客户发出信号   即将关闭,并且启动进一步的请求   禁止。在为任何飞行中的流创建留出时间之后   (至少一次往返时间),服务器可以发送另一个GOAWAY   具有更新的最后流标识符的帧。这确保了   连接可以干净地关闭而不会丢失请求。

关于Chrome中的421处理,此错误https://bugs.chromium.org/p/chromium/issues/detail?id=546991已打开,以便Chrome重新打开与服务器的新连接,最近看到了一些活动。

答案 1 :(得分:1)

是的,在HTTP / 2上要求客户端重新连接以获取进一步请求的方法是向其发送GOAWAY帧。这是如何工作的取决于您的服务器端实现或HTTP / 2支持框架。例如。框架可以拦截您的Connection: close标头,并将其视为请求后关闭连接的请求。但我想大多数HTTP / 2实现都不喜欢这样做,因为他们猜测标头只针对当前请求范围而不是整个连接。或者,框架可以在请求处理程序中提供一种方法,不仅可以访问请求和响应数据,还可以获得对HTTP / 2连接的引用,该连接可用于发送GOAWAY。

答案 2 :(得分:-1)

这可能会对您有所帮助Google HTTP2