若是正常的關閉鏈接或者 管道

其實通常咱們關閉鏈接或者是管道,都是 先關閉 輸出 流或者輸出管道的。可是咱們不知道爲何,或者說這個纔是規範。緩存

HTTP 規範建議, 當客戶端或服務器忽然要
關閉一條鏈接時, 應該「正常地關閉傳輸連
接」, 但它並無說明應該如何去作。
總之, 實現正常關閉的應用程序首先應該關
閉它們的輸出信道, 而後等待鏈接另外一端的
對等實體關閉它的輸出信道。 當兩端都告訴
對方它們不會再發送任何數據(好比關閉輸
出信道) 以後, 鏈接就會被徹底關閉, 而不
會有重置的危險。
但不幸的是, 沒法確保對等實體會實現半關
閉, 或對其進行檢查。 所以, 想要正常關閉
鏈接的應用程序應該先半關閉其輸出信道,
而後週期性地檢查其輸入信道的狀態(查找
數據, 或流的末尾) 。 若是在必定的時間區
間內對端沒有關閉輸入信道, 應用程序能夠
強制關閉鏈接, 以節省資源。

總之, 關閉鏈接的輸出信道老是很安全的。
鏈接另外一端的對等實體會在從其緩衝區中讀
出全部數據以後收到一條通知, 說明流結束
了, 這樣它就知道你將鏈接關閉了。
關閉鏈接的輸入信道比較危險, 除非你知道
另外一端不打算再發送其餘數據了。 若是另外一端向你已關閉的輸入信道發送數據, 操做系
統就會向另外一端的機器回送一條 TCP「鏈接
被對端重置」的報文, 會致使 鏈接的另外一端 讀取不到緩存的數據。

《 HTTP 權威指南 》安全

相關文章
相關標籤/搜索