首頁 >web前端 >js教程 >瀏覽器輸入url到發起http請求的具體流程介紹

瀏覽器輸入url到發起http請求的具體流程介紹

不言
不言轉載
2018-11-20 15:12:292922瀏覽

這篇文章帶給大家的內容是關於瀏覽器輸入url到發起http請求的具體過程介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

使用者輸入url

當使用者輸入url,作業系統會將輸入事件傳遞到瀏覽器中,在這過程中,瀏覽器可能會做一些預處理,例如Chrome 會根據歷史統計來預估所輸入字元對應的網站,例如輸入goog,根據先前的歷史發現90% 的機率會訪問“www.google.com ”,因此就會在輸入回車前就馬上開始建立TCP 連結甚至渲染了。

接著是輸入url之後,點擊回車,這時瀏覽器會對URL 進行檢查,首先判斷協議,如果是http 就按照Web 來處理,另外還會對這個URL 進行安全檢查

安全檢查完成之後,在瀏覽器內核中會先查看緩存,然後設定UA 等HTTP 訊息,接著呼叫不同平台下網路請求的方法。

注意:
瀏覽器和瀏覽器核心是不同的概念,瀏覽器指的是Chrome、Firefox,而瀏覽器內核則是Blink、Gecko,瀏覽器內核只負責渲染,GUI 及網路連線等跨平台工作則是瀏覽器實現的

http網路請求

透過DNS 查詢IP;
透過Socket 發送資料

#dns查詢ip

DNS,英文是Domain Name System,中文叫網域名稱系統,是Internet的服務,他將網域名稱和IP位址相互映射的一個分散式資料庫

假設使用者在瀏覽器中輸入的是www.google.com,大概過程:

如果輸入的是域名,則需要進行dns查詢,將域名解析成ip;

#進行DNS查詢的主機或軟體叫做DNS解析器,使用者使用的工作站或電腦都屬於解析器。網域解析就是利用DNS解析器得到對應IP流程,解析器會向網域名稱伺服器進行查詢處理。

主要流程如下:

  1. 從瀏覽器快取中尋找網域名稱www.google.com的IP位址

  2. 在瀏覽器快取中沒找到,就在作業系統快取中查找,這一步也會找本機的hosts看看有沒有對應的網域名稱映射(當然已經快取在系統DNS快取中了)

  3. 在系統中也沒有的話,就到你的路由器來查找,因為路由器一般也會有自己的DNS快取

如果以上都找不到,則繼續往下向dns網域名稱伺服器查詢

  • 用戶電腦的解析器向LDNS(也就是Local   DNS,網際網路服務供應商ISP),發起網域名稱解析請求,查詢www.google. com的IP位址,這是一個遞迴查找過程

  • 在快取沒有命中​​的情況下,LDNS向根網域伺服器.查詢www.google.com的IP位址,LDNS的查詢過程是一個迭代查詢的過程

  • 根告訴LDNS,我不知道www.google.com對應的IP,但我知道你可以問com網域的授權伺服器,這個網域歸他管

  • LDNS向com的授權伺服器問www.google.com對應的IP位址

  • ##com告訴LDNS,我不知道www .google.com對應的IP,但我知道你可以問google.com網域的授權伺服器,這個網域歸他管

  • LDNS向google.com的授權伺服器問www. google.com對應的IP位址

  • google.com查詢自己的ZONE檔案(也稱為區域檔案記錄),找到了www.google.com對應的IP位址,回傳給LDNS

  • LDNS本機快取一份記錄,把結果回傳給使用者電腦的解析器

  • 在這之後,使用者電腦的解析器拿到結果後,快取在自己作業系統DNS快取中,同時回傳給瀏覽器,瀏覽器依舊會快取一段時間。

注意網域查詢時有可能是經過了CDN調度器的(如果有cdn儲存功能的話)

而且,需要知道dns解析是很耗時的,因此如果解析網域太多,會讓首屏載入變得過慢,可以考慮dns-prefetch優化

tcp/ip請求

有了IP 位址,就可以透過Socket API 來傳送資料了,這時可以選擇TCP 或UDP 協定。

http本質是tcp協定。

TCP是一種面向有連線的傳輸層協定。他可以保證兩端(發送端和接收端)通訊主機之間的通訊可達。他能夠處理在傳輸過程中丟包、傳輸順序亂掉等異常情況;此外他還能有效利用寬頻,緩解網路擁塞。

建立TCP連接一開始都要經過三次握手:

第一次握手,請求建立連接,發送端發送連接請求報文

第二次握手,接收端收到發送端發過來的報文,可知發送端現在要建立聯機。然後接收端會向發送端發送一個報文

第三次握手,發送端收到了發送過來的報文,需要檢查一下返回的內容是否是正確的;若正確的話,發送端再次發送確認包

在TCP連線建立完成之後就可以發送HTTP請求了。

注意
瀏覽器對同一個網域有連線數限制,大部分是6,http1.0中往往一個資源下載就需要對應一個tcp/ip請求,而像HTTP 2.0協定儘管只使用一個TCP 連線來傳輸數據,但效能反而更好,而且還能實現請求優先權。

#

以上是瀏覽器輸入url到發起http請求的具體流程介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除