2010-03-30 69 views
17

如果調用的頁面需要大量的處理,並且用戶在結束之前單擊停止,瀏覽器是否會簡單地停止客戶端的請求?當用戶在Web瀏覽器中按下停止按鈕時會發生什麼?

或者是發送到服務器的「停止」消息,即處理取消了嗎?

+9

一隻小貓死在某個地方。 – 2010-03-30 09:43:13

+0

@Sky Sanders很有幽默感...... – 2011-05-18 20:14:11

回答

10

發生這種情況時,不會向服務器發送任何消息。當用戶按下停止按鈕時,瀏覽器會暫停頁面的呈現並忽略來自服務器的任何進一步響應。

如果請求已經發送到服務器,服務器通常會繼續執行它。但是,根據服務器的實現情況,可能會檢測到丟棄的連接。這意味着你不能依賴於它會在每種情況下都會繼續的事實。

+5

但是,服務器可以檢測到丟失的連接。在連接斷開之後服務器是否會繼續執行取決於服務器的實現,並且不能依賴於它將在每種情況下都會繼續的事實。 – Rithiur 2010-03-30 09:50:39

+0

@Rithiur,我同意你的看法,這是你的一個很好的評論。 – 2010-03-30 09:55:58

+0

我已將註釋併入答案 – 2010-03-30 10:10:28

3

HTTP中沒有定義「STOP」消息/請求,因爲HTTP是無狀態的,停止請求會要求您知道其ID。很自然地,只要HTTP請求遇到服務器,就不能從外部世界停止。

2

服務器仍然會處理請求。如果您使用Visual Studio,則可以附加到IIS工作進程以查看情況。調試>附加到處理

4

實際上,它通過關閉連接發送「停止消息」。只有當它仍然在等待主請求的輸出時(不是在完成下載內容並開始加載圖像和東西時)纔是真實的。因此,您可以檢測用戶是否按下停止按鈕,或者當您收到連接關閉消息時,連接出現問題。

這裏是PHP的用戶手冊,一些信息:http://php.net/manual/en/features.connection-handling.php

在一個側面說明 - 它總是依賴於瀏覽器的實現,並沒有一定的辦法,以確保當用戶按下停止按鈕或連接只下降。

+2

這確實是一個非常重要且經常被遺忘的細節。雖然沒有明確的「停止」命令,但可以檢測到丟失的連接。例如,這會默認中止正在運行的PHP腳本。這不會在用戶按下停止時立即發生,因此即使按停止按鈕(因爲用戶可能只是在服務器的輸出緩衝區而不是腳本本身),腳本仍可能會執行完畢。 直接從粘貼的url中:「但是,默認行爲是當您的腳本在遠程客戶端斷開連接時被中止。」 – Rithiur 2010-03-30 09:44:35

+0

@Rithiur,@bisko和@Anton Gogolev--是安東的回答與你的矛盾嗎?如果HTTP是無狀態的並且沒有ID,那麼「停止消息類型」是如何發送的?請給一些更多的解釋傢伙。謝謝 – 2011-05-18 20:26:39

相關問題