【八股文】從瀏覽器輸入一個url到服務器的流程

1.url解析與DNS解析

瀏覽器解析用戶輸入的URL,提取協議(HTTP\HTTPS)、域名、端口及路徑等信息

瀏覽器首先檢查本地DNS緩存和系統DNS緩存,若未命中,查詢本地hosts文件

最后遞歸查詢向本地DNS服務器發起請求,獲取域名對應的IP地址

這里我想插入一段,講講本地DNS緩存、系統DNS緩存、Hosts文件、DNS服務器幾者之間的關系

首先,不要覺得很復雜,其實本質就是為了根據域名拿IP地址,只是好幾個地方緩存了,先這么簡單理解。然后繼續往下看。

本地DNS緩存是瀏覽器緩存,瀏覽器緩存會緩存最近訪問的域名與IP的映射關系,來減少重復查詢的延遲

但本地DNS緩存時間較短,比如chrome默認只有1分鐘

用戶輸入URL后,瀏覽器首先檢查自身緩存,若命中就直接使用IP地址


系統DNS緩存是操作系統緩存,操作系統也維護了獨立的DNS緩存,用于存儲域名解析結果,避免重復請求DNS服務器

若瀏覽器緩存未命中,操作系統會檢查自身緩存,若命中直接返回IP地址


Hosts文件是本地手動配置的域名與IP的映射文件,路徑一般為C:\Windows\System32\drivers\etc\hosts

修改后會強制清空操作系統DNS緩存

瀏覽器緩存和系統緩存均未命中時,操作系統會檢查hosts文件,若命中,直接使用配置的IP地址


當本地、系統緩存及Hosts文件均未命中時,操作系統就會向配置的本地DNS服務器發起遞歸查詢

2.TCP連接建立

三次握手:通過TCP協議與服務器建立可靠連接

連接復用:HTTP 1.1默認支持keep-alive, 復用TCP連接以減少握手開銷

3.發送HTTP請求

瀏覽器構造HTTP請求,包含請求行(方法、URI、協議)、請求頭(user-Agent、Host、Cookie)、請求體

4.服務器處理請求

如果是靜態資源,直接返回文件

如果是動態資源,調用后端服務生成響應內容

構建響應內容,包含狀態行(http/1.1 200 ok)、響應頭(Content-type、重定向地址、緩存策略)、響應體

5.瀏覽器接收與渲染

瀏覽器解析響應頭,根據狀態碼決定后續操作

瀏覽器進行資源加載和頁面渲染

6.連接關閉與緩存

四次揮手關閉連接

DNS緩存,減少后續解析延遲

瀏覽器對靜態資源副本進行緩存,通過ETag或last-Modified驗證資源是否更新

講講協商緩存ETag和Last-Modified

瀏覽器在發送請求的時候,首先會檢查強制緩存,如果緩存命中,則不需要發送請求。直接從緩存中獲取資源數據,若強緩存失效,則發送請求進去協商緩存,服務器通過請求頭Last-Modified或Etag字段進行檢查,若200表示資源有更新,304則表示資源沒變,直接取緩存即可。

若同時存在ETag和Last-Modified,服務器優先驗證ETag。

ETag是基于資源內容hash,精確到字節級別,適用于對內容變化敏感的資源(比如JSON、js文件)

Last-Modified是基于修改時間,精確到秒級別,適用于文件、圖片等不頻繁更新的靜態資源

總結

從瀏覽器輸入一個url到服務器的流程如下:

  • url解析與DNS解析
  • TCP連接建立
  • 發送HTTP請求
  • 服務器處理請求
  • 瀏覽器接收與渲染
  • 連接關閉與緩存

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72702.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡空間安全(34)安全防御體系

前言 安全防御體系是一個多層次、多維度的系統,旨在保護組織或個人的信息資產免受各種網絡攻擊和威脅。 一、技術層面 網絡邊界防御 防火墻:部署在網絡邊界,通過設定規則允許或阻止特定流量的進出,保護內部網絡不受外部攻擊。入侵…

Linux 入門:權限的認識和學習

目錄 一.shell命令以及運行原理 二.Linux權限的概念 1.Linux下兩種用戶 cannot open directory .: Permission denied 問題 2.Linux權限管理 1).是什么 2).為什么(權限角色目標權限屬性) 3).文件訪問者的分類(角色) 4).文…

【筆記】計算機網絡——數據鏈路層

概述 鏈路是從一個結點到相鄰結點的物理路線,數據鏈路則是在鏈路的基礎上增加了一些必要的硬件和軟件實現 數據鏈路層位于物理層和網絡層之間,它的核心任務是在直接相連的節點(如相鄰的交換機,路由器)之間提供可靠且…

ngx_url_t

定義在 src/core/ngx_inet.h typedef struct {ngx_str_t url;ngx_str_t host;ngx_str_t port_text;ngx_str_t uri;in_port_t port;in_port_t default_port;in_port_t …

搜廣推校招面經五十四

美團推薦算法 一、手撕Transformer的位置編碼 1.1. 位置編碼的作用 Transformer 模型沒有顯式的序列信息(如 RNN 的循環結構),因此需要通過位置編碼(Positional Encoding)為輸入序列中的每個位置添加位置信息。位置…

網絡爬蟲【爬蟲庫urllib】

我叫不三不四,很高興見到大家,歡迎一起學習交流和進步 今天來講一講爬蟲 urllib介紹 Urllib是Python自帶的標準庫,無須安裝,直接引用即可。 Urllib是一個收集幾個模塊來使用URL的軟件包,大致具備以下功能。 ● urlli…

LabVIEW棉花穴播器排種自動監測系統

一、項目背景與行業痛點 1. 農業需求驅動 我國棉花主產區,種植面積常年超250萬公頃,傳統人工播種存在兩大核心問題: 效率瓶頸:人均日播種面積不足0.5公頃,難以匹配規模化種植需求; 精度缺陷:人…

解決diffusers加載stablediffusion模型,輸入prompt總是報錯token數超出clip最大長度限制

1. StableDiffusion1.5 在加載huggingface中的擴散模型時,輸入prompt總是會被報錯超過clip的最大長度限制。 解決方案:使用compel庫 from diffusers import AutoPipelineForText2Image import torch import pdb from compel import Compeldevice torc…

jmeter配件元素

jmeter配件元素 CSV Data Set Config名詞解釋測試場景Recycle on EOF:False配置測試結果 Recycle on EOF:True配置測試結果 Sharing mode:All Threads配置測試結果 Sharing mode:Current thread group配置測試結果 Sharing mode:Current thread配置測試結果 HTTP Header Manage…

Navicat SqlServer 設置自增主鍵

Navicat是一款優秀的數據庫管理工具&#xff0c;可以連接很多類型的數據庫。使用它可以極大的提高工作效率。 Navicat 不能設置SqlServer自增字段&#xff0c;只能通過sql語句來實現 建表時設置 create table <表名> ( <字段1-主鍵> int identity (1,1) primar…

Elasticsearch搜索引擎 3(DSL)

Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;語句來定義查詢條件&#xff0c;其JavaAPI就是在組織DSL條件。 1.DSL查詢 葉子查詢&#xff08;Leaf query clauses&#xff09;&#xff1a;在特定的字段里查詢特定值&#xff0c;屬于簡單…

final 在 java 中有什么作用?

final 在 java 中有什么作用&#xff1f; 修飾變量 修飾基本數據類型變量&#xff1a; 當用final修飾基本數據類型變量時&#xff0c;該變量就變成了常量&#xff0c;其值在初始化后不能被改變。 final int num 10; // num 20; // 這行代碼會導致編譯錯誤&#xff0c;因…

Dubbo/Hession2序列化Immutable類型的集合異常問題

問題排查 根據堆棧信息可見&#xff0c;dubbo使用默認的hession2進行序列化時出現了異常&#xff0c;異常堆棧根原因為&#xff1a;null array 位于java.util.CollSer#readResolve方法中&#xff0c;即在序列化集合時&#xff0c;集合數組為空。 向上追溯jdk.internal.ref…

目標檢測任務,如何區分兩個相近似的目標

首先&#xff0c;要了解清楚檢測的場景下&#xff0c;肉眼能否區分出目標的差異性。 如果可以區分&#xff0c;那觀察數據周圍背景的差異是否較大&#xff0c;可以先通過添加樣本來提升模型的檢測精度。添加樣本時一定要注意&#xff0c;樣本標注的準確性&#xff0c;樣本的豐…

Java面試黃金寶典1

1. 8 種基本數據類型 整數類型 byte&#xff1a; 它是最小的整數類型&#xff0c;占用 1 個字節&#xff08;8 位&#xff09;。在一些對內存使用要求極高的場景&#xff0c;比如嵌入式系統開發、數據傳輸時對數據量有嚴格限制的情況&#xff0c;會使用 byte 類型。例如&#x…

OSGEarth

OSGEarth 基于 OpenSceneGraph 構建的一個擴展庫&#xff0c;專門用于地球科學和地理信息系統&#xff08;GIS&#xff09;數據的可視化。它允許開發者創建逼真的三維地球模型&#xff0c;并在其上展示各種地理空間數據。 高端一點的表述 基于三維引擎osg開發的三維數字地球…

Word 小黑第34套

對應大貓34 設置第二頁水印&#xff0c;取消第一頁的&#xff1a;取消第二頁頁眉鏈接&#xff0c;刪除第一張水印圖片&#xff08;delete&#xff09; 調整水印圖片&#xff1a;點開頁眉頁腳 雙擊圖片 可以調整 郵件合并 -創建標簽 橫標簽數3 豎標簽5 表布局 -查看網格線 插…

2.5.1 io_uring

文章目錄 2.5.1 io_uring1. 對比1. select、poll、epoll 對比表格2. 關鍵特性說明&#xff1a;3. 應用場景 2. 異步io1. 頻繁copy2. 如何做到線程安全 3. io_uring1. 實現2. 關鍵點&#xff1a;3. 問題1. Reactor 與 Proactor 的三點不同2. epoll 與 io_uring 的區別 2.5.1 io_…

K8S學習之基礎三十六:node-exporter部署

Prometheus v2.2.1 ? 編寫yaml文件&#xff0c;包含創建ns、configmap、deployment、service # 創建monitoring空間 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitoring# 創建SA并綁定權限 kubectl create serviceaccount monitor -n monito…

為什么“連接斷開可能導致鎖未釋放”

目錄 兩種典型場景可能導致鎖未及時釋放1. **數據庫未及時檢測到連接斷開**2. **應用程序未正確處理事務** 為什么說“可能因連接斷開導致死鎖”&#xff1f;如何避免此類問題&#xff1f;總結 在大多數數據庫實現中&#xff0c;如果持有鎖的連接&#xff08;或會話&#xff09…