深入 Web 請求過程

2021-07-27 05:55:20 字數 4421 閱讀 9750

b/s 架構的好處

大多數傳統的網際網路應用程式採用長連線的互動模式,而http 協議採用無狀態的短連線的通訊方式。一次請求就完成了一次資料互動,通常也對應乙個業務邏輯。網路架構如下:

由這個伺服器決定返回預設的資料資源給訪問的使用者

需要遵守的原則發起乙個 http 請求就是建立乙個 socket 通訊的過程。

http header: 控制網際網路使用者資料的傳輸,以及瀏覽器的渲染行為和伺服器的執行邏輯。

1. 常見的 http 請求頭

請求頭說明accept-charset

用於指定客戶端接受的字符集

accept-encoding

用於指定可接受的內容編碼,如accept-encoding:gzip.deflate

accept-language

用於指定一種自然語言。如accept-language:zh-cn

host

用於指定被請求資源的 internet 主機和埠號,如host:www.taobao.com

user-agent

客戶端將它的作業系統、瀏覽器和其他屬性告訴伺服器

connection

當前連線是否保持,如connection:keep-alive

2. 常見的 http 相應頭

相應頭說明server

使用伺服器名稱,如 server: apache/1.3.6(unix)

content-type

用來指明傳送給接收者的實體正文的**型別,如 content-type/html;charset=gbk

content-language

描述了資源所用的自然語言,與 accept-language 對應

content-length

指明實體正文的長度,用以位元組方式儲存的十進位制數字來表示

keep-alive

保持連線的時間,如 keep-alive:timeout=5,max=120

3. 常見的http狀態碼

狀態碼說明200

客戶端請求成功

302臨時跳轉,跳轉的位址通過 location 指定

400客戶端請求有語法錯誤,不能被伺服器識別

403伺服器收到請求,但是拒絕提供服務

404請求的資源不存在

500伺服器發生不可預期的錯誤

瀏覽器的快取機制

ctrl + f5:瀏覽器會直接向目標 url 傳送請求,而不會使用快取的資料;http 的請求頭中會增加一些請求頭,告訴伺服器我們獲取最新的資料而不是快取。

1. cache-control/pragma

這個 http head 字段用於指定所有快取機制在整個請求/響應鏈中必須服從的指令。

欄位的可選值

可選值說明public

所有內容將都被快取,在響應頭中設定

private

內容值快取到私有快取中,在響應頭中設定

no-cache

所有內容都不會被快取,在請求頭和響應頭中設定

no-store

所有內容都不會被快取到或快取成 internet 臨時檔案中,在相應頭中設定

must-revalidation/proxy-revalidation

如果快取的內容失效,請求必須傳送到伺服器/**進行重新驗證,在請求頭中設定

max-age=***

快取的內容將在 *** 秒後失效,只在 http 1.1中可用

2. expires

expires 通常的格式為 expires:sun, 19 feb 2017 12:53:33 gmt,後面跟乙個日期和時間,超過這個時間值後,快取的內容將失效。

3. last-modified/etag

用於表示乙個伺服器上的資源的最後修改時間,資源可以是靜態(靜態內容自動加上 last-modified 字段) 或動態的內容(如 servlet 提供了乙個 getlastmodified 方法用於檢查某個動態內容是否已經更新),通過這個最後修改時間可以判斷當前請求的資源是否是最新的。

dns 網域名稱解析的過程

當使用者在瀏覽器中輸入網域名稱並按下回車鍵後:

1. 瀏覽器檢查快取中有沒有這個網域名稱對應的 ip 位址。如果有,解析結束(網域名稱的快取時間通過 ttl 屬性設定)。

2. 如果使用者的快取中沒有,瀏覽器檢查作業系統快取中是否有這個網域名稱對應的 dns 解析結果(windows 中通過c:\windows\system32\drivers\etc\hosts檔案設定)。

3. 以上兩個過程無法解析時,作業系統會把這個網域名稱傳送給 ldns,也就是本地的網域名稱伺服器(提供dns解析服務),如果是在學校接入網際網路,那麼你的dns伺服器肯定在學校,如果是小區,這個dns 時提供給你接入網際網路的提供商,即電信、聯通,也就是 spa。這個 dns 可以通過ipconfig查詢這個位址。

4. 如果 lnds 仍沒有命中,就直接到 root server 網域名稱伺服器請求解析。

5. 根網域名稱伺服器返回給本地網域名稱伺服器乙個所查詢域的主網域名稱伺服器(gtld)位址。gtld是國際頂級網域名稱伺服器,如.com、.cn、.org等,全球只有13臺左右。

6. 本地網域名稱伺服器(local dns server)再向上一步返回的 gtld 伺服器傳送請求。

7. 接受請求的gtld伺服器查詢並返回此網域名稱對應的 name server 網域名稱伺服器的位址,這個 name server 通常就是你註冊的網域名稱伺服器。

8. name server 網域名稱伺服器會查詢儲存的網域名稱和 ip 的對映關係表,正常情況下根據網域名稱得到目標的ip記錄,連同乙個 ttl 值返回給 dns server 網域名稱伺服器。

9. 返回該網域名稱對應的 ip 和ttl 值,local dns server 會快取這個網域名稱和 ip 的對應關係。

10. 把解析的結果返回給使用者。

nslookup命令查詢網域名稱解析的結果。

清除快取的網域名稱

dns 網域名稱解析後會快取解析結果,主要在兩個地方快取: 1. local dns server;2. 使用者本地機器。

本機快取的清除: 1. 在命令模式下執行ipconfig/flushdns來重新整理快取;2. 重啟

網域名稱解析的方式

網域名稱解析記錄只要分為a記錄、mx記錄、cname記錄,ns記錄、txt記錄

- a(address)記錄:用來指定網域名稱對應的ip位址,可以將多個網域名稱位址解析到乙個ip位址,但是不能講乙個網域名稱解析到多個ip位址

- mx(mail exchange)記錄:講某個網域名稱下的郵件伺服器指向自己的mail server

- cname(canonical name)記錄:別名解析就是可以為乙個網域名稱設定乙個或多個別名

- ns記錄:為某個網域名稱指定dns解析伺服器

- txt記錄:為某個主機名或網域名稱設定說明

***(content delivery network),內容分布網路,是構築在現有internet 上的一種先進的流量分布網路。目的是通過現有的 internet 中增加一層新的網路架構,將**的內容發布到最接近使用者的網路「邊緣」,使使用者就近取得所有內容,提高使用者訪問速度。

cdn=映象(mirror)+快取(cache)+整體負載均衡(gslb)

cdn請求與處理流程:向local dns 伺服器傳送請求,一般經過迭代解析後回到這個網域名稱的註冊伺服器解析(每個公司都會有一台dns解析伺服器),這個伺服器會把請求重新cname解析到另乙個網域名稱,這個網域名稱最終會指向cdn全域性中的dns負載均衡伺服器,再由這個gtm來最終分配是哪個地方的訪問使用者嗎,返回給離這個使用者最近的cdn節點。

負載均衡

負載均衡就是對工作任務進行平衡,分攤到多個操作單元上執行。如伺服器、應用伺服器,共同完成工作任務。提高伺服器響應速度及利用效率。

三種負載均衡架構分別是鏈路負載均衡、集群負載均衡、作業系統負載均衡

鏈路負載均衡:通過dns解析到不同的ip,然後使用者根據這個ip來訪問不同的目標伺服器

集群負載均衡:

- 硬體負載均衡:效能好,**高

- 軟體負載均衡:成本低,多次**,網路延時

第1章 深入web請求過程

不管網路架構如何變化,但始終有一些固定不變的原則需要遵守。1,網際網路上所有資源都要用乙個url來表示。url就是統一資源定位符。2,必須基於http協議與服務端互動。如何發起乙個http請求?發起乙個http請求和建立乙個socket連線區別不大,只不過outputstream,write寫的二進...

Web請求過程

當使用者在瀏覽器中輸入乙個url 如www.baidu.com 進行網頁瀏覽時,將會發生一系列的操作。大致流程如下 1 網域名稱解析 當使用者輸入網域名稱後,需要將網域名稱轉換成正確的ip位址,才能夠訪問web伺服器。首先會查詢本地網域名稱hosts檔案,若存在對應網域名稱的ip位址,就直接使用。若...

WEB請求過程

一 乙個例子 當使用者在瀏覽器中輸入www.com這個url時,首先,dns會把這個網域名稱解析成ip位址,然後根據這個ip找到對應的伺服器,並發起乙個get請求,對於伺服器端而言,可能會有負載均衡裝置來平均分配使用者請求,而請求的資料可能在分布式快取裡,靜態檔案中,或是資料庫中,當資料返回給瀏覽器...