調(diào)試工具
curl
HTTP/TCP
- 同一個域名同時最多只能建立 6 個 TCP 連接,如果在同一個域名下同時有 10 個請求發(fā)生纹冤,那么其中 4 個請求會進(jìn)入排隊等待狀態(tài),直至進(jìn)行中的請求完成驮樊。
-
cookies 存儲在瀏覽器(客戶端)上亲桥,通過HTTP的請求頭傳輸給服務(wù)器
HTTP請求示意圖
斷開連接
通常情況下,一旦服務(wù)器向客戶端返回了請求數(shù)據(jù)缴守,它就要關(guān)閉 TCP 連接葬毫。不過如果瀏覽器或者服務(wù)器在其頭信息中加入了:
Connection:Keep-Alive
那么 TCP 連接在發(fā)送后將仍然保持打開狀態(tài),這樣瀏覽器就可以繼續(xù)通過同一個 TCP 連接發(fā)送請求屡穗。保持 TCP 連接可以省去下次請求時需要建立連接的時間贴捡,提升資源加載速度。比如村砂,一個 Web 頁面中內(nèi)嵌的圖片就都來自同一個 Web 站點烂斋,如果初始化了一個持久連接,你就可以復(fù)用該連接础废,以請求其他資源汛骂,而不需要重新再建立新的 TCP 連接。
重定向
狀態(tài)碼:301
響應(yīng)頭字段:location
告訴瀏覽器评腺,我需要重定向到另外一個網(wǎng)址帘瞭,而需要重定向的網(wǎng)址正是包含在響應(yīng)頭的 Location 字段中,接下來蒿讥,瀏覽器獲取 Location 字段中的地址蝶念,并使用該地址重新導(dǎo)航抛腕,這就是一個完整重定向的執(zhí)行流程。
//響應(yīng)行
HTTP/1.1 301 Moved Permanently
//響應(yīng)頭
Date: Thu,08 Aug 2019 00:55:44 GMT
Content-Type: text/html
Content-Length:178
Connection: keep-alive
Location: https://www. geekbang. org/
Strict-Transport-Security: max-age=15768000
瀏覽器緩存機(jī)制
- DNS緩存
- 頁面資源緩存
通過響應(yīng)頭字段Cache-Control來設(shè)置是否緩存媒殉,其下的Max-age參數(shù)來設(shè)置存活時長(秒)
響應(yīng)頭:
Cache-Control:Max-age=2000
存活時間內(nèi)不再向服務(wù)器請求担敌,直接調(diào)用本地的緩存,超過存活時間就進(jìn)行重新請求适袜,并在請求頭中加入If-None-Match字段柄错,服務(wù)器收到請求后,通過其值判斷資源是否有更新
請求頭:
If-None-Match:"4f80f-13c-3a1xb12a"
- 如果沒有更新苦酱,就返回 304 狀態(tài)碼售貌,相當(dāng)于服務(wù)器 告訴瀏覽器:“這個緩存可以繼續(xù)使用,這次就不重復(fù)發(fā)送數(shù)據(jù)給你了疫萤∷炭纾”
-
如果資源有更新,服務(wù)器就直接返回最新資源給瀏覽器扯饶。
SESSION/COOKIE
以登錄為例
- 瀏覽器向服務(wù)器提交請求恒削,賬號密碼保存在請求體中
- 服務(wù)器收到請求,驗證之后存入SESSION尾序,返回響應(yīng)钓丰,SESSION_ID存在響應(yīng)頭中的SET-COOKIE字段中UID參數(shù)中
- 瀏覽器收到響應(yīng),將SET-COOKIE字段中的參數(shù)存入本地COOKIE中每币,之后每次請求服務(wù)器都將自身的COOKIE進(jìn)入提交携丁,其中包括從服務(wù)器得到的UID參數(shù),服務(wù)器通過UID/SESSION_ID就能訪問為對應(yīng)瀏覽器存儲的SESSION