網頁請求流程


從瀏覽器輸入網址、回車后,到用戶看到網頁內容,經過的步驟如下:

(1)dns解析,獲取ip地址;

(2)建立TCP連接,3次握手;

(3)發送HTTP請求報文;

(4)服務器接收請求並作處理;

(5)服務器發送HTTP響應報文;

(6)斷開TCP連接,4次握手。

--------------------------------------------------------------------------------

(1)DNS解析階段

http://www.cnblogs.com/yuan2016/p/DNS.html

本機系統先訪問本機的hosts文件和緩存,再去找dns(叫做local dns)詢問,一般在運營商那里。

(2)建立TCP連接,3次握手

客戶端首先與服務器建立連接,發送SYN請求;服務器收到請求后,發送SYN/ACK確認連接請求;客戶端收到后再發送ACK進行確認。

 

(3)HTTP請求報文

分為4部分:

① 請求行(3部分信息):請求方法、請求url、http協議版本。

請求方法:GET、POST、HEAD、PUT等;

HTTP協議版本:一般為兩種:http1.0、http1.1。其中,http1.0在每次請求之后,都釋放連接,針對網頁中的不同元素,如視頻、圖片,要分別進行tcp連接,需請求多次;而http1.1可進行持久連接,例如,網頁中的元素可一次性請求完,而只需進行一次tcp連接。

② 請求頭部。客戶端的信息、字符集等。

③ 空白行。

④ 請求主體。

 

(5)服務器的HTTP響應報文

也分為4部分:

① 起始行:http協議版本、狀態碼、響應頭部信息。

狀態碼:

(1)100~199 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程 。
(2)200~299 表示成功接收請求並已完成整個處理過程 。
(3)300~399 為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址。
(4)400~499 客戶端的請求有錯誤。
(5)500~599 服務器端出現錯誤。

常見的幾種如下:

正確:200;

網站被重定向,永久跳轉:301;

資源存在但沒有權限,服務器設置了訪問權限(Forbidden):403;

資源不存在:404;

服務器內部錯誤,無法完成用戶請求:500;

連接不上后台服務器(Bad Gateway):502;

回復超時(Gateway Timeout):504。

② 響應頭部。

③ 空行。

④ 響應主體。靜態網頁一般就是html,無法和用戶進行交互;動態網頁,如:jsp、php、asp等,可交互以及顯示特效;偽靜態,就是動態網頁利用rewrite重寫技術變成靜態網頁,目的是方便搜索引擎收錄,搜索引擎對url的問號等識別不好,提高網站被搜索到的幾率。

 

(6)斷開TCP連接,4次握手

① 客戶端發送FIN=1的數據包到服務端,並進入wait 1狀態;

② 服務端接收到之后,發送ACK進行確認,表示前面的數據全都收到了,並釋放客戶端到服務端的連接,進入close wait狀態,此時服務端仍可向客戶端發送數據;

③ 客戶端收到服務器的ACK之后,進入WAIT 2狀態,進一步等待服務器發出連接釋放的數據段;

④ 當服務器發送完全部的數據后,釋放服務器向客戶端的TCP傳輸連接,向客戶機發送FIN=1,ACK=1的數據包,並進入LAST ACK(最后確認)狀態,等待客戶端的確認;

⑤ 客戶端收到服務器的FIN+ACK數據包后,向服務器發送一個ACK=1的數據包,進入到TIME WAIT狀態,需等待2MSL時間(以防最后一個ACK數據包丟失),然后,客戶端才進入closed狀態,釋放tcp連接。

⑥ 服務器收到客戶端的ACK數據包后,進入CLOSED狀態,釋放TCP連接。完成整個TCP傳輸連接釋放過程。

 

整個TCP建立、釋放過程如下圖所示:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM