一次完整的http請求全程


當我們在打開瀏覽器的時候,在地址欄輸入諸如 http://www.baidu.com時,幾秒后瀏覽器打開百度頁面,幾秒鍾內到底發生了哪些事情。

一、解析URL:

  瀏覽器首先會對輸入的URL進行檢查,如果不合法,會把輸入的文字傳給默認的搜索引擎--如google、baidu;通過了URL的驗證,那么可以解析得到協議(http以及https)、域名、資源等信息;

二、DNS查詢:

  瀏覽器會先檢查域名信息是否在緩存中;

  再檢查域名是否在本地Hosts文件中;

  如果還不在,那么瀏覽器就會向DNS服務器發送一個查詢的請求,獲得目標服務器的ip地址;

三、TCP封包及傳輸:

  瀏覽器獲得了目標服務器的ip、端口,瀏覽器會調用庫函數socket,生成一個TCP流套接字,也就是TCP封包;

  TCP封包完成之后,就可以傳輸數據了,在完成“你楸啥”--“瞅你咋地”---“來過來嘮嘮”TCP三次握手,瀏覽器和服務器就建立了連接,后面就可以請求服務器資源了。

四、服務器接受請求並響應:

  http有很多請求方法,比如:GET/POST/PUT/DELETE等等,我們瀏覽器輸入URL這種,是GET方法;

  服務器接受GET請求,服務器根據請求信息,獲得相應的資源內容。

五、瀏覽器解析並渲染:

  瀏覽器從服務器拿到了想要的資源,如html頁面,首先對html文檔進行解析,生成DOM節點樹,然后加載頁面的外部資源,如css、js、img等;最后遍歷DOM樹,並計算每個節點的樣式,最終完成渲染,變成我們的頁面;

 

 

附帶:get以及post的區別:

  HTTP是什么?HTTP是基於TCP/IP的關於數據如何在萬維網中如何通信的協議。

  HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP鏈接。GET和POST能做的事情是一樣一樣的。你要給GET加上request body,給POST帶上url參數,技術上是完全行的通

  在我大萬維網世界中,TCP就像汽車,我們用TCP來運輸數據,它很可靠,從來不會發生丟件少件的現象。但是如果路上跑的全是看起來一模一樣的汽車,那這個世界看起來是一團混亂,送急件的汽車可能被前面滿載貨物的汽車攔堵在路上,整個交通系統一定會癱瘓。為了避免這種情況發生,交通規則HTTP誕生了。HTTP給汽車運輸設定了好幾個服務類別,有GET, POST, PUT, DELETE等等,HTTP規定,當執行GET請求的時候,要給汽車貼上GET的標簽(設置method為GET),而且要求把傳送的數據放在車頂上(url中)以方便記錄。如果是POST請求,就要在車上貼上POST的標簽,並把貨物放在車廂里。當然,你也可以在GET的時候往車廂內偷偷藏點貨物,但是這是很不光彩;也可以在POST的時候在車頂上也放一些數據,讓人覺得傻乎乎的。HTTP只是個行為准則,而TCP才是GET和POST怎么實現的基本。

  首先:GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息,GET參數通過URL傳遞,POST放在Request body中,GET產生一個TCP數據包;POST產生兩個TCP數據包,對於GET方式的請求,瀏覽器會把http header和data一並發送出去,服務器響應200(返回數據),而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據);然后:GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被

有關 GET 請求的其他一些注釋:

  • GET 請求可被緩存
  • GET 請求保留在瀏覽器歷史記錄中
  • GET 請求可被收藏為書簽
  • GET 請求不應在處理敏感數據時使用
  • GET 請求有長度限制
  • GET 請求只應當用於取回數據

查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發送的

有關 POST 請求的其他一些注釋:

  • POST 請求不會被緩存
  • POST 請求不會保留在瀏覽器歷史記錄中
  • POST 不能被收藏為書簽
  • POST 請求對數據長度沒有要求

 

  

 


免責聲明!

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



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