1. 程式人生 > >瀏覽器的一個請求從傳送到返回都經歷了什麼?

瀏覽器的一個請求從傳送到返回都經歷了什麼?

1.使用者輸入url,瀏覽器內部程式碼將url進行拆分解析

讓我們來看一個URL(統一資源定位器)
scheme://login:password@address:port/path/to/resource/?query_string#fragment
1 : 協議名稱
2 :層級URL的標記符號(固定不變,語法規定)
3 :訪問資源需要的憑證資訊(可選)
4 :從哪個伺服器獲取資料
5 :需要連線的埠號(預設80,可選)
6 :指向資源的層級檔案路徑
7 :查詢字串
8 :片段ID

為什麼用IP無法訪問網站,而用域名可以?

因為虛擬主機,主機放置了N個網站,而每個網站繫結1個或以上域名,所以用域名訪問主機可以解析到網站目錄,但用IP的話伺服器就不知道解析到那個目錄了。因為http請求裡包含了域名資訊,所以用域名訪問,虛擬主機伺服器會根據域名來返回網站,直接用IP訪問是因為沒有域名資訊,所以伺服器不知道要訪問的是哪個網站,只有共享IP的虛擬主機或者VPS才有這樣的情況,像有繫結獨立IP功能或者獨立主機的伺服器就可以直接通過域名和ip都可以訪問。

2.瀏覽器做了哪些事情?

瀏覽器首先去找本地hosts檔案,檢查在該檔案中是否有相應的域名、IP對應關係,如果有,則向其IP地址傳送請求,如果沒有就會將domain(域)傳送給DNS(域名伺服器)進行解析(解析如下圖),將域名解析成對應的伺服器IP地址,發回給瀏覽器。

解釋 :

1:瀏覽器客戶端向本地DNS伺服器傳送一個含有域名www.cnblogs.com的DNS查詢報文。
2:本地DNS伺服器把查詢報文轉發到根DNS伺服器,根DNS伺服器注意到其com字尾,於是向本地DNS伺服器返回comDNS伺服器的IP地址。
3:本地DNS伺服器再次向comDNS伺服器傳送查詢請求,comDNS伺服器注意到其www.cnblogs.com字尾並用負責該域名的權威DNS伺服器的IP地址作為迴應。
4:最後,本地DNS伺服器將含有www.cnblogs.com的IP地址的響應報文傳送給客戶端。

補充一下DNS域名解析

目前大家訪問網際網路進行上網瀏覽資訊時,正常是通過域名進行訪問,而實際上網路中的計算機之間只能基於IP地址來相互訪問識別對方的身份,而且要想在網際網路中傳輸資料,也必須基於外網的IP地址來完成。這裡就出現了DNS域名系統技術來幫我們簡化此過程,以此來降低使用者訪問網路資源的門欄。為什麼呢?因為它相對於IP地址,域名更容易被理解並記憶,這樣大家便可以通過域名來訪問網際網路中各項服務了。
簡單來說,就是能夠接受使用者輸入的域名或IP地址,然後自動查詢與之匹配的IP地址或域名,即將域名解析為IP地址(正向解析),或將IP地址解析為域名(反向解析)。這樣我們只需要在瀏覽器中輸入域名就能開啟想要訪問的網站了。目前,DNS域名解析技術的正向解析也是我們最常使用的一種工作模式。

層級結構

鑑於網際網路中的域名和IP地址對應關係資料庫太過於龐大,DNS域名解伺服器採用了類似目錄樹的層次結構來記錄域名與IP地址之間的對應關係,從而形成了一個分散式的資料庫系統,如下圖 :

三種類型

DNS域名系統技術作為網際網路基礎設施中的重要一環,為了提供不間斷、穩定且快速的域名查詢服務,保證網際網路的正常運轉,提供了以下三種類型的伺服器 :
主伺服器 :在特定區域內具有唯一性,負責維護該區域內的域名與IP地址之間的對應關係;
從伺服器 :從主伺服器中獲得域名與IP地址的對應關係並進行維護,以防主伺服器宕機等情況;
快取伺服器 :通過向其他域名解析伺服器查詢獲得域名與IP地址的對應關係,並經常查詢的域名資訊儲存到伺服器本地,以此來提高重複查詢的效率。
主伺服器是用於管理域名和IP地址對應關係的真正伺服器,從伺服器幫助主伺服器“打下手”,分散部署在各個國家、省市或地區,以便讓使用者就近查詢域名,從而減輕主伺服器的負載壓力。快取伺服器不太常用,一般部署在企業內網的閘道器位置,用於加速使用者的域名查詢請求。
DNS域名解析服務採用了分散式的資料結構來存放海量的“區域資料”資訊,在執行使用者發起的域名查詢請求時,具有遞迴查詢迭代查詢兩種方式。所謂的遞迴查詢,是指DNS伺服器在收到使用者發起的請求時,必須向用戶返回一個準確的查詢結果。如果DNS伺服器本地沒有儲存與之對應的資訊,則該伺服器需要詢問其他伺服器,並將返回的查詢結構提交給使用者。而迭代查詢則是指,DNS伺服器在收到使用者發起的請求時,並不直接回複查詢結構,而是告訴另一臺DNS伺服器的地址,使用者再向這臺DNS伺服器提交請求,這樣依次反覆,直到返回查詢結果。
運營商DNS  --》 根域名伺服器 --》頂級域名伺服器 --》域名註冊商伺服器

網路通訊

拿到伺服器IP,分層由高到低分別為 :應用層、傳輸層、網路層、資料鏈路層。傳送端從應用層往下走,接收端從資料鏈路層往上走

首先 :應用層客戶端傳送HTTP請求

HTTP請求包括請求報頭和請求主體兩個部分,其中請求報頭了至關重要的資訊,包括請求的方法(GET/POST)、目標url、遵循的協議(http/https/ftp..),返回的資訊是否需要換成,以及客戶端是否傳送cookie等。

然後:傳輸層TCP傳輸報文

位於傳輸層的TCP協議為傳輸報文提供可靠的位元組流服務。它為了方便傳輸,將大塊的資料分割成以報文段為單位的資料包進行管理,併為它們編號,方便伺服器接收時能準確地還原報文資訊。TCP協議通過“三次握手”等方法保證傳輸的安全可靠。
客戶端傳送一個帶有SYN標誌的資料包給服務端,在一定的延遲時間內等待接收的回覆。服務端收到後,回傳一個帶有SYN/ACK標誌的資料包以示傳達確認資訊,最後客戶端再回傳一個帶ACK標誌的資料包,代表握手結束,連線成功。
SYN(Synchronize Sequence Numbers)同步序列編號
ACK(Acknowledgement)確認字元

接著 :網路層IP協議查詢MAC地址

IP地址的作用是把TCP分割好的各種資料包傳遞給接收方。而要保證確實能傳到接收方還需要接收方的MAC地址,也就是實體地址。IP地址和MAC地址是一一對應的關係,一個網路裝置的IP地址可以更換,但是MAC地址一般是固定不變的。ARP協議可以將IP地址解析成對應的MAC地址。當通訊的雙方不在用一個區域網時,需要多次中轉才能到達最終的目標,在中轉的過程中需要通過下一個中轉站的MAC地址來搜尋下一個中轉目標。
資料到達資料鏈路層
在招待對方的MAC地址後,就將資料傳送到資料鏈路層傳輸,這時,客戶端傳送請求的階段結束。

再次 :伺服器接收資料

接收端的伺服器在鏈路層接收到資料包,再層層上直到應用層。這過程中包括在運輸層通過TCP協議將分段的資料包重新組成原來的HTTP請求報文。

伺服器響應請求

服務接收到客戶端傳送的HTTP請求後,查詢客戶端請求的資源,並返回響應報文,響應報文中包括一個重要的資訊 -- 狀態碼。狀態碼由三位數字組成。

伺服器返回相應檔案

伺服器端收到請求後的由web伺服器(準確說應該是http伺服器)處理請求,諸如Apache、Ngnix、IIS等。web伺服器解析使用者請求,知道了需要排程那些資原始檔,再通過相應的這些資原始檔處理使用者請求和引數,並呼叫資料庫資訊,最後將結果通過web伺服器返回給瀏覽器客戶端。	

關閉TCP連線

為了避免伺服器與客戶端雙方的資源佔用和損壞,當雙方沒有請求或響應傳遞時,任意一方都可以發起關閉請求。與建立TCP連線的3次握手類似,關閉TCP連線,需要四次握手。	


參考 :http://www.cnblogs.com/echo-hui/p/9298203.html