需要进行HTTP2响应,这将强制客户端重新连接到同一服务器到同一地址。
如果是HTTP / 1.1,可以使用307 Temporary Redirect
标题发送Connection: close
响应。
在HTTP / 2中Connection: close
标头被忽略,重定向无需重新连接,这会导致重定向循环错误。
此外,我已尝试使用相同的网址向客户发送421 Misdirected Request
响应,但Chrome浏览器在收到此回复后无效。
强制HTTP / 2客户端重新连接的最正确方法是什么?可以发送哪个服务器响应?也许某种GOAWAY
框架?
答案 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