當我們在瀏覽器的位址列輸入 www.baidu.com,然後回車,回車這一瞬間到看到頁面這一過程到底發生了什麼呢?我們看一下下圖:1. 網域名稱解析關於http協議可以參考以下:
http協議漫談
http協議概覽
了解http headers的方方面面
首先瀏覽器會解析網域名稱(準確的叫法應該是主機名)得到對應的ip位址,那怎麼解析到對應的ip位址?2. 發起tcp3次握手① 瀏覽器會首先搜尋瀏覽器自身的dns快取(快取時間比較短,大概只有1分鐘,且只能容納1000條快取),看自身的快取中是否有該網域名稱對應的條目,而且沒有過期,如果有且沒有過期則解析到此結束;
② 如果瀏覽器自身的快取裡面沒有找到對應的條目,那麼瀏覽器會搜尋作業系統自身的dns快取,如果找到且沒有過期則停止搜尋解析到此結束;
③ 如果在windows系統的dns快取也沒有找到,那麼嘗試讀取hosts檔案(位於c:\windows\system32\drivers\etc),看看這裡面有沒有該網域名稱對應的ip位址,如果有則解析成功;
④ 如果在hosts檔案中也沒有找到對應的條目,瀏覽器就會發起乙個dns的系統呼叫,就會向本地配置的首選dns伺服器(一般是電信運營商提供的,也可以使用像google提供的dns伺服器)發起網域名稱解析請求(通過的是udp協議向dns的53埠發起請求,這個請求是遞迴的請求,也就是運營商的dns伺服器必須得提供給我們該網域名稱的ip位址),運營商的dns伺服器首先查詢自身的快取,找到對應的條目,且沒有過期,則解析成功。如果沒有找到對應的條目,則有運營商的dns代我們的瀏覽器發起迭代dns解析請求,它首先是會找根域的dns的ip位址(這個dns伺服器都內建13臺根域的dns的ip位址),然後進一步請求;
正常情況下通過這四步基本就能解析網域名稱獲得ip了;
拿到網域名稱對應的ip位址之後,user-agent(一般是指瀏覽器)會以乙個隨機埠(1024 < 埠 < 65535)向伺服器的web程式的80埠發起tcp的連線請求。這個連線請求(原始的http請求經過tcp/ip4層模型的層層封包)到達伺服器端後(這中間通過各種路由裝置,區域網內除外),進入到網絡卡,然後是進入到核心的tcp/ip協議棧(用於識別該連線請求,解封包,一層一層的剝開),還有可能要經過netfilter防火牆(屬於核心的模組)的過濾,最終到達web程式,最終建立了tcp/ip的連線。3. 建立tcp連線後發起http請求為什麼http協議要基於tcp來實現?
目前在internet中所有的傳輸都是通過tcp/ip進行的,http協議作為tcp/ip模型中應用層的協議也不例外,tcp是乙個端到端的可靠的面向連線的協議,所以http基於傳輸層tcp協議不用擔心資料的傳輸的各種問題。
進過tcp3次握手之後,瀏覽器發起了http的請求4. 伺服器端響應http請求,瀏覽器得到html**http請求報文格式(http請求報文由3部分組成(請求行+請求頭+請求體))
請求行:
①是請求方法,get和post是最常見的http方法,除此以外還包括delete、head、options、put、trace。
②為請求對應的url位址,它和報文頭的host屬性組成完整的請求url。
③是協議名稱及版本號。
請求頭:
④是http的報文頭,報文頭包含若干個屬性,格式為「屬性名:屬性值」,服務端據此獲取客戶端的資訊。
與快取相關的規則資訊,均包含在header中
請求體:
⑤是報文體,它將乙個頁面表單中的元件值通過param1=value1¶m2=value2的鍵值對形式編碼成乙個格式化串,它承載多個請求引數的資料。不但報文體可以傳遞請求引數,請求url也可以通過類似於「/chapter15/user.html?param1=value1¶m2=value2」的方式傳遞請求引數。
什麼是url、uri、urn?
uri :uniform resource identifier 統一資源識別符號
url:uniform resource locator 統一資源定位符
urn: uniform resource name 統一資源名稱
url和urn 都屬於 uri
伺服器端web程式接收到http請求以後,就開始處理該請求,處理之後就返回給瀏覽器html檔案5. 瀏覽器解析html**,並請求html**中的資源一些常見狀態碼
1xx: 資訊性狀態碼(100,101)
2xx: 成功狀態碼
200ok
3xx: 重定向狀態碼
狀態碼描述
301永久重定向, location響應首部的值仍為當前url,因此為隱藏重定向
302臨時重定向,顯式重定向, location響應首部的值為新的url
304not modified 未修改,比如本地快取的資源檔案和伺服器上比較時,發現並沒有修改,伺服器返回乙個304狀態碼,告訴瀏覽器,你不用請求該資源,直接使用本地的資源即可
4xx: 客戶端錯誤狀態碼
404not found 請求的url資源並不存在
5xx: 伺服器端錯誤狀態碼
狀態碼描述
500internal server error 伺服器內部錯誤
502bad gateway 前面**伺服器聯絡不到後端的伺服器時出現
504gateway timeout 這個是**能聯絡到後端的伺服器,但是後端的伺服器在規定的時間內沒有給**伺服器響應
6. 瀏覽器對頁面進行渲染呈現給使用者.
瀏覽器利用自己內部的工作機制,把請求到的靜態資源和html**進行渲染,渲染之後呈現給使用者。自此一次完整的http事務宣告完成.
一次完整的HTTP請求
一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...
一次完整的HTTP請求
一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...
一次完整的http請求
一些基本概念 1.tcp ip 把與網際網路相關聯的協議集合起來的總稱 2.http是tcp ip的乙個子集 3.tcp ip分為四層 一次完整的http請求流程 1.客戶端通過dns服務得到目標ip 2.http協議 生成針對目標web伺服器的http請求 3.tcp協議 將http請求報文分割成...