在浏览器输入一个网址,按回车之后发生了什么?
生活随笔
收集整理的這篇文章主要介紹了
在浏览器输入一个网址,按回车之后发生了什么?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
詳細參考網址:http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html
這個問題涉及到瀏覽器、網絡、服務器三者之間的一系列行為,希望能為大家闡述下自己的理解:
首先,當我們輸入一個網址的時候,這個網址例如www.baidu.com,我們需要知道這個網址其實是一個主機名,需要通過映射關系根據主機名獲取IP地址。這個映射關系可以稱為DNS。
有哪些方法途徑可以獲取IP地址呢?第一個是我們的瀏覽器。瀏覽器會將我們近一段時間訪問的主機名及對應的IP地址進行緩存,緩存時間與瀏覽器有關,在該緩存時間內,我們輸入同樣的主機名就可以快速從瀏覽器緩存區獲取IP地址并建立連接。第二是我們的Host文件。當瀏覽器的緩存不存在我們想要的IP地址時,系統會查找C盤下的一個system32內的Host文件,該文件會記錄我們常用的主機名及IP地址對應關系。第三是路由上的DNS緩存,路由器會緩存主機名及IP地址對應關系。第四最后則是查找為我們提供網絡服務的服務商的DNS服務器,如電信、聯通網絡服務商等。一系列的方法為完成的目的只有一個,根據主機名獲取IP地址。
接下來,當完成了IP地址獲取之后會干嘛呢?這里需要做的就是建立TCP連接,其實就是三次握手,具體三次握手是干嘛,無非就是SYN,ACK,ESTABLISHED。每次響應報文碼都會加1,而報文碼的產生和系統有關,小編記得好像是從0開始,每0.5s增加6400.具體過程可以參考我的其他文章。
完成了三次握手之后就是發送HTTP請求,請求的方式是GET和POST兩種。GET請求是從服務器獲取數據,然后講其加到?之后作為參數返回給服務器來獲取數據,而POST請求則是講請求內容加到請求體中,并經過編碼壓縮交給服務器。通常GET請求可以用于獲取輕量級的數據,而POST請求的內容數據量比較龐大些。關于請求和響應的狀態碼,如200、301、302、304、404等具體含義小編會寫一篇文章來闡述。總之,瀏覽器和服務器之間通過GET和POST完成數據的請求和響應,最終一系列的數據會根據請求頭的內容來返回,如指定的文件格式、壓縮方式等。
這里需要提及一點的就是,由于服務器上的帶寬限制,有時候在進行數據獲取與返回的時候,需要使用緩存、預取、并行、壓縮等方式來進行,有利于大大提高數據獲取的效率。
當數據完成請求到返回的過程之后,根據Keep-alive屬性可以選擇是否斷開連接,HTTP/1.1一般支持同一個TCP多個請求,而不是1.0版本下的完成一次請求就發生斷開。TCP的斷開與連接不一樣,斷開可以分為主動關閉和被動關閉,可以經過4次握手。
在網絡訪問中,還有一點就是需要明白session和cookies的區別。在網絡訪問過程中,服務端和客戶端都保持各自的狀態,session用來記錄服務端的狀態,而建立連接時每個服務端需要和客戶端保持通信,并且獲得客戶端的狀態,于是,服務端將自身記錄的客戶端狀態通過一個標識符來返回給客戶端,客戶端上就使用cookies來記錄這個標示。
總結
以上是生活随笔為你收集整理的在浏览器输入一个网址,按回车之后发生了什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java集合中HashSet的实现原理
- 下一篇: 报数字游戏