一次完整的HTTP請求處理過程

2021-09-20 20:33:34 字數 2781 閱讀 3687

osi七層模型我們都知道,那當我們從瀏覽器輸入到有頁面顯示的過程中發生了什麼呢?

下面我們就通過抓包來分析:

網路傳輸

工具:任意瀏覽器、wireshark抓包工具

應用層:

瀏覽器接收使用者輸入的網域名稱由瀏覽器**客戶向伺服器傳送請求get,而應用層的get請求被封裝在http協議中,抓包分析get資訊如下:

請求的方式是get,除了get請求還有其他方式如post、head、put、delete、trace、options;

請求的uri即統一資源識別符號,表示要訪問資源的位置;

當前瀏覽器使用的http協議版本;

最終伺服器端就是根據get資訊找到資源,並給出應答

此外http封裝內容還包括其他一些資訊:

客戶端瀏覽器接受的檔案格式;

語言瀏覽器版本資訊

……網路傳輸模型是下層為上層提供服務,比如物理層為鏈路層提供服務,而鏈路層又為網路層提供服務,以此類推

那應用層的http協議就是由下層的表示層、會話層和傳輸層為其提供服務

傳輸層:

網路層的ip是在茫茫網際網路路徑中找到目標機器,那傳輸層就是在此機器中定位具體的服務---通過埠號,也就是說客戶端要訪問伺服器端資源前提是要與伺服器端建立tcp連線,伺服器端使用的埠是80,客戶端使用隨機埠

客戶端使用任意埠61649,所謂任意埠就是大於1024的埠,而小於1024的埠都是有名的埠即留給特定服務的,如80埠是http的,20、21是ftp的、22埠ssh的,不過也有些特別的,如mysql使用的卻是3306埠;

tcp建立連線過程就是三次握手的過程,tcp斷開連線是四次揮手。因為tcp是面向連線的嘛

從上圖抓包中能看出這是乙個ack確認包

通過tcp的80埠,伺服器收到這個包後就能根據80埠找到對應的http服務

網路層:

傳輸層將應用層的http資訊封裝在傳輸層中,我們稱之為資料段segment,並新增傳輸層頭部從抓包來看是20位元組

然後交給網路層處理,同樣網路層對傳輸層發來的資訊進行本層封裝並新增網路層報頭資訊,稱之為資料報packet

其實資料傳輸的過程就是不斷的封裝與解封裝的過程,我們的請求資料沒經過乙個路由器就要解封裝然後再封裝,直到到達目的地

至於不斷的解封裝就是為了得到目的ip位址,只有這樣才知道下一跳路徑該怎麼走

目前主流使用ipv4版本,ipv6也正在普及中但是程序緩慢;

與傳輸層一樣,網路層的頭部也是20位元組,者20位元組中包含最重要的目的ip位址即59.110.244.199,這個位址就是我們最終訪問的伺服器位址;

本資料報的總長度是821位元組;

鏈路層:

本層除了指明上層協議外,就是給出mac位址,本層封裝稱為資料幀

0x0800表示上層協議是ip;

目的硬體位址一般就是閘道器裝置的mac位址,即資料要交給誰

最後資料幀以電流的方式傳輸到網際網路,而這些就是物理層要做的了

此過程是一步一步封裝的過程,當資料到達目的,其操作與本端正好相反是一步一步解封裝

dns解析

網路傳輸部分講到了怎麼定址、埠、封裝與解封裝,但網路定址還是靠點分十進位制的格式來進行。可使用者端明明輸入的是

怎麼就變成了數字的ip位址呢?這就是dns在起作用:

客戶端要向伺服器端請求資源就要有對方的ip位址,然後才能建立tcp連線才能進行後續的操作,但是ip位址從**來?

獲取ip位址,就要從dns伺服器來,那dns在**?客戶端又是怎麼從dns獲得我們最終要訪問的伺服器的ip位址呢?

每個地區都會有本地區專用的dns伺服器,客戶請求ip一般都是向當地dns請求。也就是說要獲得最終ip位址我們客戶端還要與dns伺服器建立連線,一般是udp連線;

udp是無連線狀態的,與http協議一樣;

dns服務端使用的埠是53;

如果本地dns伺服器沒有bbs.51cto.com的a記錄,那麼就會向根dns伺服器即.傳送請求,然後根再以子域.com位址應答,本地dns伺服器再向.com請求ip位址,然後.com域伺服器將51cto.com位址告訴給本地dns伺服器,最終本地dns伺服器通過51cto.com得到bbs.51cto.com的ip位址,然後返回給客戶端此位址。最終客戶端再經過「網路傳輸」一層層封裝解封裝將資料傳到目的伺服器;

伺服器響應

伺服器處理請求:對請求報文進行解析,並獲取請求的資源及請求方法等相關資訊,根據方法,資源,首部和可選的主體部分對請求進行處理;

伺服器訪問資源:獲取請求報文中請求的資源web伺服器,即存放了web資源的伺服器,負責向請求者提供對方請求的靜態資源,或動態執行後生成的資源;

構建響應報文:一旦web伺服器識別除了資源,就執行請求方法中描述的動作(get),並返回響應報文。響應報文中包含有響應狀態碼(200)、響應首部,如果生成了響應主體的話,還包括響應主體。

然後將響應報文發給客戶端,並記錄日誌

響應包再從網路傳輸到客戶端,一層層解封裝,完成整個過程

一次完整的 HTTP 請求過程

一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...

一次完整的HTTP請求過程

一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...

一次完整的 HTTP 請求過程

一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...