網路程式設計 四 輸入乙個URL後發生了什麼?

2021-10-13 10:14:26 字數 2781 閱讀 1914

當在瀏覽器上輸入了乙個**,例如按回車後發生了什麼?

dns解析的過程就是尋找哪台機器上有你需要資源的過程,尋找的過程遵循就近原則。

(1)首先是查詢瀏覽器快取,瀏覽器會儲存一段時間內訪問過的一些**的dns資訊,不同瀏覽器儲存的時常不等。

(2)如果沒有找到對應的記錄,這個時候瀏覽器會嘗試呼叫作業系統快取來繼續查詢這個**的對應dns資訊。

(3)如果還是沒找到對應的ip,那麼接著會傳送乙個請求到路由器上,然後路由器在自己的路由器快取上查詢記錄,路由器一般也存有dns資訊。

(4)如果還是沒有,這個請求就會被傳送到isp(注:internet service provider,網際網路服務提供商,就是網路運營商,中國電信中國移動等),isp也會有相應的isp dns伺服器,就是本地dns伺服器,請求的網域名稱基本上都能在這裡找得到。

(5)如果還是沒有的話, isp的dns伺服器會將請求發向根網域名稱伺服器進行搜尋。根網域名稱伺服器就是面向全球的頂級dns伺服器,共有13臺邏輯上的伺服器,從a到m命名,真正的實體伺服器則有幾百台,分布於全球各大洲。

(6)如果到了這裡還是找不到網域名稱的對應資訊,那只能說明乙個問題:這個網域名稱本來就不存在,它沒有在網上正式註冊過。或者網域名稱過期了。

這也就是為什麼有時候開啟乙個新頁面會有點慢,因為如果本地沒什麼快取,查詢網域名稱的過程要這樣遞迴地查詢下去,查詢完還要一層層的向上返回。例如"***.baidu.com",網域名稱先是解析出這是個.com的網域名稱,然後跑到管理.com域的伺服器上進行進一步查詢,然後是.baidu,最後是***, 所以網域名稱結構為:**網域名稱.二級網域名稱.一級網域名稱。

瀏覽器終於得到了ip以後,向伺服器傳送tcp連線,tcp連線經過三次握手。

瀏覽器和伺服器建立連線以後,瀏覽器接著給這個ip位址給伺服器傳送乙個http請求,方式為get,例如訪問www.baidu.com。其本質是在建立起的tcp連線中,按照http協議標準傳送乙個索要網頁的請求。

這個get請求包含了主機(host)、使用者**(user-agent),使用者**就是自己的瀏覽器,它是你的"**人",connection(連線屬性)中的keep-alive表示瀏覽器告訴對方伺服器在傳輸完現在請求的內容後不要斷開連線,不斷開的話下次繼續連線速度就很快了。可能還會有cookies,cookies儲存了使用者的登陸資訊,一般儲存的是使用者的jsessionid,在每次向伺服器傳送請求的時候會重**送給伺服器。

在建立連線傳送請求時每個服務端需要和客戶端保持通訊,有很多客戶端都會和伺服器進行通訊。伺服器為了識別是哪個客戶端與它通訊,就必須用乙個標識記錄客戶端的資訊。客戶端首次訪問伺服器,服務端返回響應時通過附帶乙個記錄的客戶端資訊的標識來返回給客戶端,這個標識就是jsessionid,jsessionid就放在了客戶端的cookies裡。當客戶端再次向伺服器傳送請求時上就使用上次記錄的cookies裡面的jsessionid,這樣伺服器就知道是哪個瀏覽器了。這樣他們之間就能保持通訊了。

傳送完請求接下來就是等待回應了,如下圖:

傳送完請求接下來就是等待回應了,如下圖:

伺服器收到瀏覽器的請求以後,會解析這個請求(讀請求頭),然後生成乙個響應頭和具體響應內容。接著伺服器會傳回來乙個響應頭和乙個響應,響應頭告訴了瀏覽器一些必要的資訊,例如重要的status code,2開頭如200表示一切正常,3開頭表示重定向,4開頭是客戶端錯誤,如404表示請求的資源不存在,5開頭表示伺服器端錯誤。響應就是具體的要請求的頁面內容。

(1)瀏覽器顯示html

當伺服器返回響應之後,瀏覽器讀取關於這個響應的說明書(響應頭),然後開始解析這個響應並在頁面上顯示出來。

瀏覽器開啟乙個**的時候會慢慢載入這個頁面,一部分一部分的顯示,直到完全顯示,知道最後的旋轉進度條停止。因此在瀏覽器沒有完整接受全部html文件時,它就已經開始顯示這個頁面了。

(2)瀏覽器向伺服器傳送請求獲取嵌入在html中的物件

在瀏覽器顯示html時,開啟乙個網頁的過程中,主頁(index)頁面框架傳送過來以後,瀏覽器還會因頁面上的靜態資源多次發起連線請求,需要獲取嵌入在html中的其他位址的資源。這時,瀏覽器會傳送一些請求來獲取這些檔案。這些內容也要一點點地請求過來,所以標籤欄轉啊轉,內容刷啊刷,最後全部請求並載入好了就終於好了。

這在檔案屬於靜態檔案,首次訪問會留在瀏覽器的快取中,過期才會從伺服器去取。快取的內容通常不會儲存很久,因為難保**不會被改動。

靜態的檔案一般會從cdn中去取,cdn根據請求獲取資源的時候可能還會用到負載均衡。

(3)瀏覽器傳送非同步(ajax)請求

對於那些動態的請求,動態網頁等就必須要從伺服器獲取了。對於靜態的頁面內容,瀏覽器通常會進行快取,而對於動態的內容,瀏覽器通常不會進行快取。對於這些動態請求,nginx可能會專門設定一些伺服器用來處理這些訪問動態頁面的請求。

當資料完成請求到返回的過程之後,根據connection的keep-alive屬性可以選擇是否斷開tcp連線,http/1.1一般支援同乙個tcp多個請求,而不是1.0版本下的完成一次請求就發生斷開。tcp的斷開與連線不一樣,斷開可以分為主動關閉和被動關閉,需要經過4次握手。

當瀏覽器需要的全部資料都已經載入完畢,乙個頁面就顯示完了。

輸入乙個**後發生了什麼

輸入乙個URL後發生了什麼

輸入乙個 並按回車之後瀏覽器會根據輸入的url查詢對應的ip,具體過程如下 1 查詢瀏覽器快取,瀏覽器會儲存一段時間內訪問過的一些 的dns資訊。2 如果沒有找到對應的ip,瀏覽器就呼叫作業系統快取來繼續查詢這個 的dns資訊。3 如果還是沒找到對應的ip,就傳送乙個請求到路由器上,路由器在路由器快...

輸入乙個URL後敲下回車發生了什麼?

首先瀏覽器先會到快取裡面去找,如果有就直接開啟,如果沒有或者快取過期就對url進行網域名稱解析。url所表示的不是最後資源所在的位置,而是為了方便記憶對ip位址的重定向,網域名稱解析的過程實際是將網域名稱還原為ip位址。首先,瀏覽器會檢查hosts檔案中是否存在ip位址和網域名稱之間的對映關係,如果...

瀏覽器中輸入乙個URL後,按下回車後發生了什麼

1.解析ip位址 a.瀏覽器搜尋瀏覽器dns快取 b.搜尋作業系統dns快取 c.搜尋路由器的dns快取 d.作業系統將網域名稱傳送至 本地網域名稱伺服器 遞迴查詢方式 本地網域名稱伺服器 查詢自己的dns快取,查詢成功則返回結果 e.否則,本地網域名稱伺服器向根網域名稱伺服器查詢 一般是迭代查詢 ...