如何做網(wǎng)站規(guī)劃谷歌推廣運(yùn)營(yíng)
之前在開發(fā)中,有些后端服務(wù)處理非常慢,頁面可能會(huì)出現(xiàn)504 Gateway time-out的提示,或者服務(wù)器還沒返回?cái)?shù)據(jù),瀏覽器就關(guān)掉了。我們只是看到了瀏覽器關(guān)掉,但是服務(wù)器和客戶端的狀態(tài)都是什么樣的呢?
問題
在瀏覽器上發(fā)送http請(qǐng)求到服務(wù)器 2. 服務(wù)器接受導(dǎo)請(qǐng)求開始處理數(shù)據(jù) 3. 在服務(wù)器返回結(jié)果前關(guān)閉了瀏覽器,那么服務(wù)器的數(shù)據(jù)還會(huì)繼續(xù)返回么?客戶端會(huì)是什么狀態(tài)?
分析
當(dāng)在瀏覽器上發(fā)送HTTP請(qǐng)求到服務(wù)器,并在服務(wù)器返回結(jié)果前關(guān)閉了瀏覽器,會(huì)發(fā)生以下情況:
1. 瀏覽器發(fā)送HTTP請(qǐng)求到服務(wù)器
當(dāng)你在瀏覽器上點(diǎn)擊某個(gè)鏈接或提交一個(gè)表單時(shí),瀏覽器會(huì)通過HTTP協(xié)議發(fā)送一個(gè)請(qǐng)求到服務(wù)器。這個(gè)請(qǐng)求會(huì)建立一個(gè)TCP連接,并發(fā)送一個(gè)HTTP請(qǐng)求報(bào)文。
2. 服務(wù)器接受請(qǐng)求并開始處理數(shù)據(jù)
服務(wù)器接收到來自瀏覽器的HTTP請(qǐng)求后,開始處理請(qǐng)求中的數(shù)據(jù)。這可能包括查詢數(shù)據(jù)庫(kù)、執(zhí)行業(yè)務(wù)邏輯等步驟。
3. 在服務(wù)器返回結(jié)果前關(guān)閉了瀏覽器
假設(shè)在服務(wù)器還沒有完全返回結(jié)果之前,你關(guān)閉了瀏覽器。這時(shí)會(huì)發(fā)生以下變化:
服務(wù)器端
- 服務(wù)器繼續(xù)處理請(qǐng)求:
- 服務(wù)器在檢測(cè)到客戶端斷開連接之前,會(huì)繼續(xù)處理請(qǐng)求。這包括執(zhí)行任何相關(guān)的業(yè)務(wù)邏輯或數(shù)據(jù)庫(kù)操作。
- 服務(wù)器檢測(cè)到斷開連接:
- 一旦服務(wù)器嘗試向客戶端發(fā)送響應(yīng)數(shù)據(jù)時(shí)發(fā)現(xiàn)連接已經(jīng)被斷開,它通常會(huì)收到一個(gè)網(wǎng)絡(luò)錯(cuò)誤(如ConnectionReset異常),表明客戶端已經(jīng)關(guān)閉了連接。
- 服務(wù)器的響應(yīng):
- 服務(wù)器會(huì)停止嘗試發(fā)送響應(yīng)數(shù)據(jù),并關(guān)閉連接。對(duì)于某些服務(wù)器實(shí)現(xiàn),如果響應(yīng)已經(jīng)準(zhǔn)備好但未能發(fā)送,可能會(huì)記錄錯(cuò)誤日志。
客戶端(瀏覽器)
- 瀏覽器檢測(cè)到斷開連接:
- 瀏覽器會(huì)檢測(cè)到連接被中斷,并顯示錯(cuò)誤消息。通常情況下,瀏覽器會(huì)顯示類似于“此頁面無法加載”或“請(qǐng)求超時(shí)”的提示。
- 瀏覽器的狀態(tài):
- 瀏覽器不會(huì)接收到服務(wù)器的響應(yīng)數(shù)據(jù)。由于瀏覽器已經(jīng)被關(guān)閉,它無法接收任何進(jìn)一步的信息或響應(yīng)。
具體案例分析
使用HTTP/1.1協(xié)議
- 瀏覽器斷開連接:
- 瀏覽器關(guān)閉后,TCP連接會(huì)被中斷。
- 服務(wù)器檢測(cè)到斷開連接:
- 服務(wù)器嘗試發(fā)送響應(yīng)數(shù)據(jù)時(shí)會(huì)收到網(wǎng)絡(luò)錯(cuò)誤,例如ConnectionReset異常。
- 服務(wù)器的響應(yīng):
- 服務(wù)器通常會(huì)記錄錯(cuò)誤日志,并關(guān)閉連接。
使用HTTP/2協(xié)議
- 瀏覽器斷開連接:
- 如果瀏覽器關(guān)閉,HTTP/2協(xié)議中的流(stream)也會(huì)被中斷。
- 服務(wù)器檢測(cè)到斷開連接:
- 服務(wù)器在嘗試通過流發(fā)送響應(yīng)數(shù)據(jù)時(shí)會(huì)檢測(cè)到流被中斷。
- 服務(wù)器的響應(yīng):
- 服務(wù)器會(huì)停止發(fā)送響應(yīng)數(shù)據(jù),并可能關(guān)閉流或整個(gè)連接。
客戶端的狀態(tài)
- 瀏覽器檢測(cè)到斷開連接:
- 瀏覽器會(huì)檢測(cè)到連接被中斷,并顯示錯(cuò)誤消息。
- 瀏覽器的顯示:
- 用戶界面通常會(huì)顯示一個(gè)錯(cuò)誤頁面或消息,表明請(qǐng)求無法完成或頁面加載失敗。
總結(jié)
當(dāng)瀏覽器在服務(wù)器返回結(jié)果前關(guān)閉時(shí),服務(wù)器通常會(huì)繼續(xù)處理請(qǐng)求,直到它嘗試發(fā)送響應(yīng)數(shù)據(jù)時(shí)發(fā)現(xiàn)連接已被斷開。這時(shí),服務(wù)器會(huì)記錄錯(cuò)誤并關(guān)閉連接。瀏覽器會(huì)檢測(cè)到連接中斷,并顯示相應(yīng)的錯(cuò)誤消息。具體的行為取決于使用的HTTP版本(HTTP/1.1 vs HTTP/2)以及服務(wù)器和瀏覽器的具體實(shí)現(xiàn)。