2017-03-06 251 views
1

需要製作HTTP2響應,這將強制客戶端重新連接到相同的服務器到同一地址。如何強制HTTP2客戶端重新連接到服務器?

在HTTP/1.1的情況下,可以通過發送307 Temporary Redirect響應與Connection: close標題完成。

在HTTP/2 Connection: close標頭被忽略,重定向執行時沒有重新連接,這會導致重定向循環錯誤。

此外,我試着發送421 Misdirected Request響應給客戶端使用相同的url,但Chrome瀏覽器在收到此響應後沒有做任何事情。

什麼是強制HTTP/2客戶端重新連接的最正確方法?哪些服務器響應可以發送?也許某種GOAWAY框架?

+2

強制斷開/重新連接的目的是什麼?您確定沒有針對您的問題的HTTP 2解決方案*不需要拆除現有的連接? –

回答

1

此之後RFC 7540建議應導致重新連接的正常關機程序:

正試圖正常關閉連接的服務器 應發送初始GOAWAY幀與最後流標識符 設置爲2^31-1和一個NO_ERROR代碼。這向客戶發出信號,表明 關閉即將發生,並且啓動進一步的請求是 被禁止。在允許任何空中流創建的時間 (至少一個往返時間)之後,服務器可以發送具有更新的最後流標識符的另一個GOAWAY 幀。這確保了可以在不丟失請求的情況下乾淨地關閉連接。

關於在Chrome中處理421,此錯誤https://bugs.chromium.org/p/chromium/issues/detail?id=546991已打開,Chrome重新打開與服務器的新連接,最近看到一些活動。

1

是的,在HTTP/2上請求客戶端重新連接以進一步請求的方式是向其發送GOAWAY幀。這是如何工作的取決於您的服務器端實現或HTTP/2支持的框架。例如。一個框架可能會攔截您的Connection: close標頭,並將其視爲請求後關閉連接的請求。但我想大多數HTTP/2實現不會這樣做,因爲他們猜測頭只針對當前的請求範圍而不是整個連接。或者,框架可以在請求處理程序中提供一種方式,以便不僅可以訪問請求和響應數據,還可以獲得對可用於發送GOAWAY的HTTP/2連接的引用。

相關問題