1.1 瀏覽器根據網域名稱解析ip位址瀏覽器快取:首先搜尋瀏覽器自身的dns快取(快取的時間比較短,大概只有1分鐘,且只能容納1000條快取),看自身的快取中是否是有網域名稱對應的條目,而且沒有過期,如果有且沒有過期則解析到此結束。
系統快取:如果瀏覽器自身的快取裡面沒有找到對應的條目,那麼瀏覽器會搜尋作業系統自身的dns快取,如果找到且沒有過期則停止搜尋解析到此結束。
路由器快取:如果系統快取也沒有找到,則會向路由器傳送查詢請求。
isp(網際網路服務提供商) dns快取:如果在路由快取也沒找到,最後要查的就是isp快取dns的伺服器。
1.2 瀏覽器與web伺服器建立乙個tcp連線
tcp的3次握手。
1.3 瀏覽器給web伺服器傳送乙個http請求
乙個http請求報文由請求行(request line)、請求頭部(headers)、空行(blank line)和請求資料(request body)4個部分組成。
1.3.1 請求行
1.請求方法
http/1.1 定義的請求方法有8種:get(完整請求乙個資源)、post(提交表單)、put(上傳檔案)、delete(刪除)、patch、head(僅請求響應首部)、options(返回請求的資源所支援的方法)、trace(追求乙個資源請求中間所經過的**)。最常的兩種get和post,如果是restful介面的話一般會用到get、post、delete、put。
(1)get
當客戶端要從伺服器中讀取文件時,當點選網頁上的鏈結或者通過在瀏覽器的位址列輸入**來瀏覽網頁的,使用的都是get方式。get方法要求伺服器將url定位的資源放在響應報文的資料部分,會送給客戶端。使用get方法時,請求引數和對應的值附加在url後面,利用乙個問號『?』代表url的結尾與請求引數的開始,傳遞引數長度受限制。例如,/index.jsp?id=100&op=bind。通過get方式傳遞的資料直接放在位址中,所以get方式的請求一般不包含「請求內容」部分,請求資料以位址的形式表現在請求行。位址中『?』之後的部分就是通過get傳送的請求資料,各個資料之間用『&』符號隔開。顯然這種方式不適合傳送私密資料。另外,由於不同的瀏覽器對位址的字元限制也有所不同,一半最多只能識別1024個字元,所以如果需要傳送大量資料的時候,也不適合使用get方式。如果資料是英文本母/數字,原樣傳送;如果是空格,轉換為+;如果是中文/其他字元,則直接把字串用base64加密,得出:%e4%bd%a0%e5%a5%bd,其中%xx中的xx為該符號以16進製表示的ascii。
(2)post
允許客戶端給伺服器提供資訊較多。post方法將請求引數封裝在http請求資料中,以名稱/值的形式出現,可以傳輸大量資料,這樣post方式對傳送的資料大小沒有限制,而且也不會顯示在url中。post方式請求行中不包含資料字串,這些資料儲存在「請求內容」部分,各資料之間也是使用『&』符號隔開。post方式大多用於頁面的表單中。因為post也能完成get的功能,因此多數人在設計表單的時候一律都使用post方式,其實這是乙個誤區。get方式也有自己的特點和優勢,我們應該根據不同的情況來選擇是使用get還是使用post。
url:統一資源定位符,是一種資源位置的抽象唯一識別方法。
組成:《協議》://《主機》:《埠》/《路徑》
埠和路徑有事可以省略(http預設埠號是80)
3.協議版本
協議版本的格式為:http/主版本號.次版本號,常用的有http/1.0和http/1.1
1.3.2 請求頭部
請求頭部為請求報文新增了一些附加資訊,由「名/值」對組成,每行一對,名和值之間使用冒號分隔。
請求頭部的最後會有乙個空行,表示請求頭部結束,接下來為請求資料。
1.3.3 請求資料
請求資料不在get方法中使用,而在post方法中使用。post方法適用於需要客戶填寫表單的場合。與請求資料相關的最長使用的請求頭部是cntent-type和content-length。下面是乙個post方法的請求報文:
post /index.php http/1.1 請求行
host: localhost
user-agent: mozilla/5.0 (windows nt 5.1; rv:10.0.2) gecko/20100101 firefox/10.0.2 請求頭
空行username=aa&password=1234 請求資料
1.4 伺服器端響應http請求,瀏覽器得到html**
http響應報文由狀態行(status line)、相應頭部(headers)、空行(blank line)和響應資料(response body)4個部分組成。
1.4.1 狀態行
狀態行由3部分組成,分別為:協議版本、狀態碼、狀態碼掃瞄。其中協議版本與請求報文一致,狀態碼描述是對狀態碼的簡單描述。
1.4.2 響應頭部
1.4.3 響應資料
用於存放需要返回給客戶端的資料資訊。
http/1.1 200 ok 狀態行
date: sun, 17 mar 2013 08:12:54 gmt 響應頭部
server: apache/2.2.8 (win32) php/5.2.5
x-powered-by: php/5.2.5
set-cookie: phpsessid=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
expires: thu, 19 nov 1981 08:52:00 gmt
cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
pragma: no-cache
content-length: 4393
keep-alive: timeout=5, max=100
connection: keep-alive
content-type: text/html; charset=utf-8
空行響應資料
1.5 瀏覽器解析html**,並請求html**中的資源1.6 關閉tcp連線,瀏覽器對頁面進行渲染呈現給使用者
http請求的全過程
這幾天看乙個講解乙個網頁從我們輸入位址到顯示在我們面前的乙個講解,是我對http又有了乙個完整的了解,現在做一下整個流程的記錄,雖然不是很詳細,但是整個過程是完整的。如果不對,請指正!開啟瀏覽器,位址列輸入blog.csdn.net。開始進行網域名稱解析 瀏覽器獲得網域名稱對應的ip位址後 發起ht...
HTTP請求全過程
http通訊機制是在一次完整的http通訊過程中,web瀏覽器與web伺服器之間將完成下列7個步驟 1.建立tcp連線 在http工作開始之前,web瀏覽器首先要通過網路與web伺服器建立連線,該連線是通過tcp來完成的,該協議與ip協議共同構建internet,即著名的tcp ip協議族,因此in...
WEB請求的全過程
本系列是以iis6.0為準進行闡述的 當我們在瀏覽器位址列中鍵入比如 回車後,相當於向伺服器 192.168.1.1 傳送了乙個web頁 test.aspx 請求,這個請求經由http.sys後 到iis。那麼在到達iis之前,http.sys對這個請求做了什麼?http.sys又是個啥呢?它又有什...