http請求全過程


第一步:瀏覽器生成http請求信息(第五層)

  1.分解url

    當用戶輸入網址時,瀏覽器會以一定的規則分解網址,

    以 http://www.cemabenteng.com/dir/index.html 為例進行分解,

    http為請求的協議名稱,www.cemabenteng.com為請求的web服務器,dir/index.html為請求的資源,

    (如果是靜態資源,則dir為該服務器上的目錄,index.html為該目錄上的資源,如果是動態資源,則服務器會根據請求的資源名稱動態提供資源)

   2.生成http請求消息

    消息格式:    <方法  URI  http版本>

             <消息頭>

             <消息體> 

    2.1 方法

       當用戶輸入網址,或者點擊超鏈接請求服務器時,使用的是GET方法

       當提交form表單時,使用form頁面設置的方法

    2.2 URI 

       即上例中的dir/index.html

    2.3 http版本

      一般為1.1

    2.4 消息頭

      與請求相關的一些信息,例如我們熟知的cookie,User-Agent(使用的瀏覽器類型及版本)等。

    2.5 消息體

      消息體存放請求中攜帶的數據,因為GET方法所攜帶的數據都在URL中,因此消息體沒有內容。而POST方法所攜帶的數據就存放於此。

  3.域名解析

    生成消息后,瀏覽器會調用操作系統的DNS客戶端向DNS服務器查詢域名對應的IP地址。

      3.1 瀏覽器將域名(即上例中的www.cemabenteng.com)發送給DNS服務器,

      3.2 DNS客戶器將域名生成域名查詢消息並發送給tcpip協議驅動,

      3.3 tcpip協議驅動使用網卡將消息發送給最近的DNS服務器,

      3.4 最近的DNS服務器將消息發送給根服務器,然后逐級向下查詢,直到查詢到結果返回。

        ps:DNS查詢使用UDP協議,只發送一個包,而由於包大小有限,只能容下13個根服務器信息,因此世界上只有13個根服務器,國內只有根服務器鏡像。

  4.委托操作系統發送http請求

    瀏覽器將IP地址和請求消息發送給操作系統,委托操作系統發送出http請求。

 

第二步:TCP模塊發送請求(第四層)

    1.創建套接字

      操作系統在接到請求后,首先會申請一塊用於存放一個套接字所需的內存空間,套接字是存放了一些通信相關的控制信息的集合。

      然后向這個內存空間寫入一些初始狀態,並把該套接字的唯一標識告訴應用程序,即瀏覽器。

    2.連接服務器

       連接服務器就是通信雙方交換控制信息。操作系統首先接受瀏覽器給出的服務器地址,然后申請數據緩存空間並創建TCP頭部,通過

      委托ip模塊,向服務器傳達開始通信的請求。服務器會返回連接成功的信息,之后會向套接字中寫入服務器的ip等信息,並標識狀態為已連接。

      最后客戶端返回接收相應成功的信息給服務器,連接就算成功完成了。當沒有收到確認信息時,會重新發送,多次失敗后才會向外報錯。

      (這就像一個快遞公司,有很復雜的機制)

    3.發送數據

      操作系統收到數據后會將數據存放在的發送數據緩存區中,並等待接收后續數據,只有當接收的數據達到一個網絡包的大小的時候,或者達到最大等待時間之后,

      才會委托ip模塊發送出去。瀏覽器數據量小、對性能要求高,一般會設置為直接發送。一般的http請求數據用一個網絡包就夠了,但有時提交的表單數據較大時,會拆分成

      多個網絡包發送。

第三步:IP模塊發送請求(第三層)

    1.生成IP頭部

      IP模塊在發送數據前,會生成IP頭部,再附上要發送的數據。IP頭部包含IP地址等信息。

    2.生成MAC頭部

      生成IP頭部后,還會在前面加上MAC頭部。它包含了MAC地址等信息。MAC地址需使用IP通過ARP協議查詢。每次轉發過程都會更換下一個網絡設備的MAC地址。

第四步:MAC模塊發送請求(第二層)

    1.生成報頭

      mac模塊會在網絡包的開頭加上報頭和起始幀分界符。報頭是一串固定頻率的時鍾信號,它用於確定數據每一位的讀取時機。

      報頭后面是起始幀分界符,它的末尾序列比起報頭有一點變化,用來標記報頭的結束,網絡包的開始。

    2.生成校驗序列

      除了開頭的報頭,末尾還會加上幀校驗序列,校驗序列是通過整個包計算出來的,用於校驗包的正誤。類似身份證的校驗碼。

    3.生成電信號

      幀組裝完畢后,便會轉換成通用的電信號並委托PHY模塊發送。

第五步:PHY模塊發送請求(第一層)

    最終網卡中的PHY模塊會將通用電信號轉換成網絡傳輸所需的格式,通過網線發送出去。經過網絡轉發后,最終到達服務器。

 

    。。。

 

    最后,服務器反向重復上述步驟,把電信號逐步轉換回http請求信息並進行處理。

 

    ps:上述內容純屬博主個人理解,如有謬誤,還望指出。

 


免責聲明!

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



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