天天看點

深入分析javaweb技術内幕筆記——深入分析Web請求過程

一:B/S網絡架構概述

B/S網絡架構基于統一的應用層協定HTTP來互動資料。與大多數傳統C/S網際網路應用程式采用的長連接配接的互動模式不同,HTTP采用無狀态的短連接配接的通信方式。通常情況下,一次請求也對應一個業務邏輯,然後這次通信連接配接就斷開了。采用這種方式是為了能夠同時服務更多的使用者。現在的網際網路應用每天要處理上億個使用者請求,不可能每個使用者通路一次之後就一直保持這個連接配接。

不管網絡架構如何變化,一些固定不變的原則需要遵守:

1.網際網路上所有的資源都要用一個URL(統一資源定位符)來表示

2.必須基于HTTP與服務端進行互動

3.資料展示必須在浏覽器中進行

二:HTTP常見請求頭,響應頭,狀态碼

請求頭 說明

Accept-Charset 使用者指定用戶端接受的字元集

Accept-Encoding 使用者指定可接受的内容編碼。如Accept-Encoding:gzip.deflate

Accept-Language 用于指定一種自然語言

Host 使用者指定被請求資源的Internet主機和端口号

User-Agent 用戶端将它的作業系統,浏覽器和其他屬性告訴伺服器

Connection 目前連接配接是否保持

響應頭 說明

Server 使用的伺服器的名稱

Content-Type 用來指明發送給接受者的實體正文的媒體類型

Content-Encoding 與請求頭的Accept-Encoding相對應,告訴浏覽器服務端采用的是什麼壓縮編碼

Content-Language 描述了資源所有的自然語言,與Accept-Language相對應

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

Keep-Alive 保持連接配接的時間。如Keep-Alive:timeout=5,max=20

狀态碼 說明

200 用戶端請求成功

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

400 用戶端請求有文法錯誤,不能被伺服器識别

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

404 請求的資源不存在

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

浏覽器緩存

Ctrl+F5組合重新整理頁面,浏覽器會直接向目标URL發起請求,而不會使用浏覽器緩存的資料,但如果在應用伺服器的前端部署一個緩存伺服器。就也會使用緩存資料

javaweb中控制緩存

response.setHeader("Cache-Control", "no-cache");  

response.setHeader("Pragma", "no-cache");  

response.setDateHeader("expires", -1); 

DNS域名解析

1.浏覽器會檢查浏覽器的緩存中是否有該域名解析過的對應的ip位址

2.浏覽器會檢查作業系統中C:\Windows\System32\drivers\etc\hosts中是否有該域名對應的ip

3.如果以上兩個步驟都沒有找到對應的ip。作業系統會把該域名發送的在作業系統中設定的DNS伺服器(LDNS即本地域名伺服器)

4.如果LDNS沒有命中,就直接到Root Server域名伺服器請求解析

5.根域名伺服器會傳回給本地域名伺服器一個所查詢域的主域名伺服器(gTLD Server)位址

6.本地域名伺服器再向上一步傳回的gTLD伺服器發起請求

7.接受請求的gTLD伺服器查找并傳回此域名對應的Name Server域名伺服器的位址。這個Name Server通常就是你注冊的域名伺服器。例如你在某個域名伺服器提供商申 請的域名,那麼這個域名解析任務就由這個域名提供商的伺服器來完成

8.Name Server域名伺服器會查詢存儲的域名和IP的映射關系,在正常情況下都根據域名得到目标IP記錄,連同一個TTL值傳回給DNS Server域名伺服器

9.傳回該域名對應的IP和TTL值。LDNS會緩存這個域名和IP的對應關系,緩存時間有TTL控制

10.把解析結果傳回給使用者,使用者根據TTL值緩存在本地系統緩存中,域名解析過程結束