1. 程式人生 > >一次完整的HTTP請求與響應都發生了什麼

一次完整的HTTP請求與響應都發生了什麼

本篇介紹的是一次完成的http請求都經過了那些步驟,這些步驟相應的作用又是什麼

1.在瀏覽器端輸入網站的url地址

只有知道了一個網站的url地址才能訪問到這個網站

2.瀏覽器查詢快取

瀏覽器會查詢瀏覽器快取,系統快取,路由快取,如果沒有的話 繼續下一步,如果有的話,直接顯示

注意:瀏覽器會把訪問過得web網站資源(html 圖片)快取起來,而判斷是否使用快取的條件有以下幾種:

  1. 是否有這個網站的快取
  2. 這個網站的快取是否過期,具體看Cache-Control 中快取的有效時間
  3. 跟伺服器進行協商是否使用快取,如果上次快取的時候有Last-modified 和 Etag 欄位,本次請求就會加上If-Modified-Since(上次請求資源的時間)和If-None-Match(上次資源的修改時間)

3.通過DNS獲取url對應的ip地址

現在本機的host檔案中查詢是否有這個url對應的ip,如果沒有的話,就請求DNS進行ip地址的獲取

4.建立TCP連結

http在工作之前,需要客戶端和服務端建立連結,這個連結的建立是通過tcp(三次握手)來完成的,因為http是比tcp更高層的協議,在網路協議的建立中,不談底層談高層都是在耍流氓,所以想要讓http進行工作,需要tcp首先建立連結

5.瀏覽器向web伺服器傳送請求

一旦連結已經建立,瀏覽器就可以給web伺服器傳送請求命令,比如 : GET/deom/hello.jsp HTTP/1.1

6.瀏覽器給web伺服器傳送請求頭資訊

瀏覽器在傳送了請求後,還要給web伺服器請求頭資訊,比如accept-charset(瀏覽器端指定的字符集),最後傳送一個空的請求頭代表請求傳送完畢,注意:如果是post提交,則會繼續提交請求體

7.web伺服器進行應答

應答的第一部分是http版本號,第二部分是協議的狀態碼,比如:HTTP/1.1 200 OK

8.web伺服器傳送應答頭訊息

web伺服器給瀏覽器傳送應答頭訊息,也就是關於web伺服器自己的資訊,最後傳送一個空白行代表應答結束

9.web伺服器傳送資料

以應答頭裡面的content-type所描述的格式傳送資料

10.web伺服器關閉連結

web伺服器向瀏覽器傳送了應答資料之後,就要關閉tcp連結(tcp四次握手關閉連結),如果添加了connection:keep-alive,那麼就還會保持連結狀態

注:如果想要看HTTP和HTTPS的常見面試題和他們的原理區別,可以看我的另一篇文章