當我們在打開瀏覽器的時候,在地址欄輸入諸如 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 請求對數據長度沒有要求