瀏覽器是我們日常都會用的乙個軟體,那麼,當你向瀏覽器的位址列輸入乙個位址(url)時,它背後究竟發生了哪些故事呢?
對於瀏覽器來說,一般可以支援兩種位址的輸入:ip(192.***.***.***)直接訪問和通過網域名稱(www.***.com)訪問。在你輸入乙個位址後,瀏覽器最先做的就是檢查你的位址是否「合法」。譬如,用ip的時候有超過255的數字、網域名稱中有非法字元等。只有當你正確輸入乙個位址,瀏覽器才會按照你的指令進行以下步驟。否則,(現在的)瀏覽器會認為你想在搜尋引擎中搜尋這段字串。
假設你已輸入正確,此時瀏覽器會檢測你的訪問方式。訪問方式有http和https兩種,區別如下:
由於http的明文傳輸機制安全性很差,因此大部分**現已轉為https。但如果你不指定明確的訪問方式,瀏覽器依舊會預設使用http進行訪問。為了能使你順利到達https的訪問通道,**開發者想出了下圖的辦法讓你的http訪問轉化成https訪問,即當你請求80埠時,伺服器會返回一條重定向至443埠的資訊,讓你的瀏覽器重新請求443埠。
一種常用的解決方案是使用htst,在此不再詳述。讀者請自行搜尋了解。
除了上述檢查,瀏覽器還會進行一些額外的操作,比如安全檢查、訪問限制(比如某些**emmmm)。
最後,瀏覽器將檢查自己的快取情況,來決定下一步的行為,如圖所示。其中要注意的是,rfc 規定,如果 etag 和 last-modified 都有,則必須一次性都發給伺服器,沒有優先順序。如果伺服器輸出了 etag,沒有必要再輸出 last-modified。
etag是lastmodifed的補充,有些動態生成的內容就可以用md5做etag控制快取了。etag比lastmodified更加嚴謹,如果資源發生變化,etag就會發生變化,就會把最新的資源給客戶端返回去,而lastmodified不識別s(秒)單位裡的修改,所以如果資源在s(秒)單位裡發生了修改,那lastmodified也不會發生改變,這樣如果只用了lastmodified,客戶端得到的資源就不是最新的;但是設定了etag之後,每次客戶端發出請求,服務端都會根據資源重新生成乙個etag,對效能有影響。
etag只在特定情況下才更有用,比如同一url的資源在不同條件下返回不同的內容。而現實中一般會通過各種方法來避免這樣的情況出現,因為這樣容易消耗更多資源。相比而言,lastmodified一般情況下一般足夠,且lastmodified更快,並且是web伺服器自動支援的。因此預設使用lastmodified,有需要的情況下才用etag
瀏覽器中輸入乙個網域名稱位址
從瀏覽器中輸入乙個網域名稱位址,我們會經歷哪些過程,這篇文章不會去細化到每乙個過程的具體實現,後面的文章會陸續告訴你。那麼我們應該關注哪些東西呢?瀏覽器 網路 伺服器 瀏覽器 協議名稱 伺服器名 網域名稱 資源路徑 引數瀏覽器客戶端解析好我們輸入的位址以後,解析出網域名稱,再根據網域名稱解析出ip位...
瀏覽器中輸入乙個網域名稱位址
從瀏覽器中輸入乙個網域名稱位址,我們會經歷哪些過程,這篇文章不會去細化到每乙個過程的具體實現,後面的文章會陸續告訴你。那麼我們應該關注哪些東西呢?瀏覽器 網路 伺服器 瀏覽器 協議名稱 伺服器名 網域名稱 資源路徑 引數瀏覽器客戶端解析好我們輸入的位址以後,解析出網域名稱,再根據網域名稱解析出ip位...
在瀏覽器中輸入乙個URL的位址會發生什麼?
摘要 我們使用瀏覽器去瀏覽 但是我們卻不知道這個過程中到底發生了什麼,本篇博文就是講述在瀏覽器輸入url之後到瀏覽器展現出頁面這一過程中都是發生了什麼,是如何發生的。dns網域名稱解析 建立tcp連線 傳送http請求 伺服器處理請求 返回響應結果 關閉tcp連線 瀏覽器解析html 瀏覽器布局渲染...