Http Http請求的流程

2022-06-08 13:42:09 字數 3449 閱讀 4940

瀏覽器輸入**:之後會完成什麼步驟呢?

首先,瀏覽器構建請求行資訊,構建好後,瀏覽器準備發起網路請求。

get /index.html http1.1
在真正發起網路請求之前,瀏覽器會先在瀏覽器快取中查詢是否有要請求的檔案。其中,瀏覽器快取是一種在本地儲存資源副本,以供下次請求時直接使用的技術

當瀏覽器發現請求資源已經存在瀏覽器快取中存有副本,則會攔截請求並返回該資源副本結束請求。如果查詢快取失敗,則會進入網路請求。所以會有利於:

我們通過開頭預備知識和前文也大概了解到了http和tcp的關係。瀏覽器使用http 協議作為應用層協議,用來封裝請求的文字資訊;並使用tcp/ip 作傳輸層協議將它發到網路上,所以在 http 工作開始之前,瀏覽器需要通過 tcp 與伺服器建立連線。也就是說 http 的內容是通過 tcp 的傳輸資料階段來實現的。

tcp和http的關係示意圖:

據此,我們可以知道建立http網路請求就是,通過url位址來解析獲取ip和埠資訊,建立伺服器和tcp連線。我們通過前文《tcp協議》 說到了資料報都是通過ip位址傳輸給接收方的。而我們**一般的位址都是網域名稱,所以需要把網域名稱和ip位址做對映關係,即解析ip位址的系統「網域名稱系統(dns)」解析出 ip位址,並獲取對應埠號獲得建立連線的前置條件。換句話說,即瀏覽器請求dns返回網域名稱對應的ip,而請求dns時也會查詢dns資料快取服務,判斷是否網域名稱已解析過, 如果解析過則查詢直接使用,拿到ip後則判斷url是否指明埠號,沒有則http協議預設時80埠。

chrome 有個機制,同乙個網域名稱同時最多只能建立 6 個 tcp 連線,如果在同乙個網域名稱下同時有 10 個請求發生,那麼其中 4 個請求會進入排隊等待狀態,直至進行中的請求完成。當然,如果當前請求數量少於 6,會直接進入下一步,建立 tcp 連線。

佇列等待結束後,tcp和伺服器實現「三次握手」(前文tcp協議有描述),即客戶端和伺服器傳送三個資料報以確認連線,實現瀏覽器和服務的連線。

一旦建立了 tcp 連線,瀏覽器就可以和伺服器進行通訊了。而 http 中的資料正是在這個通訊過程中傳輸的。

http請求資料格式:

首先瀏覽器會向伺服器傳送請求行,它包括了請求方法、請求 uri(uniform resource identifier)和 http 版本協議

其中請求方式有get,post,put,delete等,其中常用的post會用於傳送一些資料給伺服器,比如登入**把使用者資訊傳送給伺服器,一般 這些資料會通過請求體傳送。

在瀏覽器傳送請求行命令之後,還要以請求頭形式傳送其他一些資訊,把瀏覽器的一些基礎資訊告訴伺服器。比如包含了瀏覽器所使用的作業系統、瀏覽器核心等資訊,以及當前請求的網域名稱資訊、cookie等。

通過curl工具(或network面板)我們可以了解到伺服器返回的資料格式:

首先伺服器會返回響應行,包括協議版本和狀態碼。

如果出現錯誤,伺服器會通過請求行的狀態碼來返回對應的處理結果,例如:

正如瀏覽器會隨同請求傳送請求頭一樣,伺服器也會隨同響應向瀏覽器傳送響應頭。響應頭包含了伺服器自身的一些資訊, 比如伺服器生成返回資料的時間、返回的資料型別(json、html、流**等型別),以及伺服器要在客戶端儲存的 cookie 等資訊。

響應頭之後,伺服器會傳送響應體資料,通常包含了html的實際內容。以上為伺服器響應瀏覽器的過程。

一旦伺服器向客戶端返回了請求資料,它就要關閉 tcp 連線。不過如果瀏覽器或者伺服器在其頭資訊中加入了:

connection:keep-alive
則tcp 連線在傳送後將仍然保持開啟狀態,這樣瀏覽器就可以繼續通過同乙個 tcp 連線傳送請求。保持 tcp 連線可以省去下次請求時需要建立連線的時間,提公升資源載入速度。如果乙個頁面內嵌的都來自同一web站點,則初始化乙個持久連線則可復用減少tcp的連線。

重定向返回響應行和響應頭:

狀態 301 就是告訴瀏覽器,我需要重定向到另外乙個**,而需要重定向的**正是包含在響應頭的 location 欄位中,接下來,瀏覽器獲取 location 欄位中的位址,並使用該位址重新導航,這就是乙個完整重定向的執行流程。

通過http請求的完整過程,我們就知道,請求過程中dns緩緩和頁面資源快取會被瀏覽器快取起來,以減少向伺服器請求的資源,所以會再次請求站點時速度會快。

瀏覽器資源快取處理過程:

從上圖的第一次請求可以看出,當伺服器返回 http 響應頭給瀏覽器時,瀏覽器是通過響應頭中的 cache-control 欄位來設定是否快取該資源。通常,我們還需要為這個資源設定乙個快取過期時長,而這個時長是通過 cache-control 中的 max-age 引數來設定的。

因此在該快取資源還未過期的情況下, 如果再次請求該資源,會直接返回快取中的資源給瀏覽器。

如果快取過期了,瀏覽器則會繼續發起網路請求,並且在http 請求頭中帶上if-none-match,伺服器收到請求頭後,會根據 if-none-match 的值來判斷請求的資源是否有更新。

登入**,通過post方式提交資訊給伺服器,伺服器接收到瀏覽器提交的資訊之後,查詢驗證資訊正確則會生成表面使用者身份的字串寫入響應頭的set-cookie欄位裡返回瀏覽器。

瀏覽器解析響應頭,如有set-cookie欄位則儲存在本地,當使用者再次訪問時,發起http請求前瀏覽器會讀取cookie資料並寫入請求頭髮送到伺服器,伺服器再次判斷資訊,如果 正確則展示使用者登入狀態及使用者資訊。

最後總結出瀏覽器中的http請求從發起到結束一共經歷了八個階段:構建請求、查詢快取、準備 ip 和埠、等待 tcp 佇列、建立 tcp 連線、發起 http 請求、伺服器處理請求、伺服器返回請求和斷開連線

詳細http請求流程:

HTTP HTTP請求頭和響應頭詳解

http 請求報文由3部分組成 請求行 請求頭 請求體 1 是請求方法,get和post是最常見的http方法,初次以外還包括 delete head options put trace,不過現在大部分的瀏覽器只支援get和post 2 是請求對應的url位址,他和報文頭的host屬性,組合起來是乙...

HTTP HTTP報文首部之請求首部字段詳解

請求首部 從客戶端向伺服器端傳送請求報文時,使用的首部.補充了請求的附加內容,客戶端資訊,響應內容相關優先順序等資訊 因為內容比較多,我就用 的形式來說吧,起碼好看一點兒 請求首部字段 說明accept 可增加優先順序,用 q 來額外表示權重 範圍為0 1 可精確至小數點後3位 1為最大值.如果不設...

HTTP HTTP報文首部之請求首部字段詳解

請求首部 從客戶端向伺服器端傳送請求報文時,使用的首部.補充了請求的附加內容,客戶端資訊,響應內容相關優先順序等資訊 因為內容比較多,我就用 的形式來說吧,起碼好看一點兒 請求首部字段 說明accept 可增加優先順序,用 q 來額外表示權重 範圍為0 1 可精確至小數點後3位 1為最大值.如果不設...