HTTP狀態(tài)碼及含義
1xx 服務器收到請求,繼續(xù)處理
2xx 表示成功
3xx 表示需要進一步操作
4xx 表示瀏覽器方面出錯
5xx 表示服務器方面出錯
200 - 請求成功
201 - 已創(chuàng)建
202 - 已接受
203 - 成功,未授權(quán)
204 - 成功,無內(nèi)容
205 - 成功,重置內(nèi)容
206 - 成功,部分內(nèi)容
301 - 永久移動,重定向
302 - 臨時移動,可使用原url
304 - 未修改,可使用緩存
305 - 需代理訪問
400 - 請求語法錯誤
401 - 要求身份認證
403 - 拒絕請求
404 - 請求的資源(網(wǎng)頁等)不存在
500 - 內(nèi)部服務器錯誤
HTTP 緩存
CacheControl: max-age=3600 是設置過期時長(相對時間),跟本地時間無關。
Expires是設置過期時間(絕對時間),但是如果用戶的本地時間錯亂了,可能會有問題
ETag 是通過對比瀏覽器和服務器資源的特征值(如MD5)來決定是否要發(fā)送文件內(nèi)容,如果一樣就只發(fā)送 304(not modified)
緩存策略: 可分為 強緩存 和 協(xié)商緩存
- Cache-Control/Expires: 瀏覽器判斷緩存是否過期,未過期時,直接使用強緩存,Cache-Control的 max-age 優(yōu)先級高于 Expires
- 當緩存已經(jīng)過期時,使用協(xié)商緩存
唯一標識方案: Etag(response 攜帶) & If-None-Match(request攜帶,上一次返回的 Etag): 服務器判斷資源是否被修改
最后一次修改時間: Last-Modified(response) & If-Modified-Since (request,上一次返回的Last-Modified);如果一致,則直接返回 304 通知瀏覽器使用緩存;如不一致,則服務端返回新的資源。
Last-Modified 缺點:
周期性修改,但內(nèi)容未變時,會導致緩存失效
最小粒度只到 s, s 以內(nèi)的改動無法檢測到
Etag 的優(yōu)先級高于 Last-Modified
GET和POST的區(qū)別
- GET比POST更不安全,因為參數(shù)直接暴露在URL上,所以不能用來傳遞敏感信息
- GET請求在URL中傳送的參數(shù)是有長度限制的,而POST沒有
- GET參數(shù)通過URL傳遞,POST放在Request body中
- GET冪等,POST不冪等(冪等指的是同樣的請求被執(zhí)行一次與連續(xù)執(zhí)行多次的效果是一樣的,服務器的狀態(tài)也是一樣的)
- GET 只需要一個報文,POST 需要兩個以上報文
- GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里,而POST中的參數(shù)不會被保留。
- GET請求會被瀏覽器主動cache,而POST不會,除非手動設置
- GET請求只能進行url編碼,而POST支持多種編碼方式
- 對參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,而POST沒有限制
- GET在瀏覽器回退時是無害的,而POST會再次提交請求
- GET產(chǎn)生的URL地址可以被加入收藏欄,而POST不可以
Cookie 、LocalStorage 、SessionStorage 、Session
Cookie V.S. LocalStorage
主要區(qū)別是 Cookie 會被發(fā)送到服務器,而 LocalStorage 不會
Cookie 一般最大 4k,LocalStorage 可以用 5Mb 甚至 10Mb(各瀏覽器不同)
LocalStorage V.S. SessionStorage
LocalStorage 一般不會自動過期(除非用戶手動清除),而 SessionStorage 在回話結(jié)束時過期(如關閉瀏覽器)
Cookie V.S. Session
Cookie 存在瀏覽器的文件里,Session 存在服務器的文件里
Session 是基于 Cookie 實現(xiàn)的,具體做法就是把 SessionID 存在 Cookie 里

http1.0 http1.1 http2.0區(qū)別
1.0 協(xié)議缺陷:
無法復用鏈接,完成即斷開,重新慢啟動和 TCP 3次握手
head of line blocking: 線頭阻塞,導致請求之間互相影響1.1 改進:
長連接(默認 keep-alive),復用
host 字段指定對應的虛擬站點
新增功能:
斷點續(xù)傳、身份認證、狀態(tài)管理、cache 緩存(Cache-Control、Expires、Last-Modified、Etag)2.0:
多路復用: 在共享TCP鏈接的基礎上同時發(fā)送請求和響應
二進制分幀層: 應用層和傳輸層之間
首部壓縮
服務端推送:服務器可以額外的向客戶端推送資源,而無需客戶端明確的請求
https: 較為安全的網(wǎng)絡傳輸協(xié)議
證書(公鑰)、SSL 加密、端口 443
TCP:
三次握手
建立連接前,客戶端和服務端需要通過握手來確認對方:
客戶端發(fā)送 syn(同步序列編號) 請求,進入 syn_send 狀態(tài),等待確認
服務端接收并確認 syn 包后發(fā)送 syn+ack 包,進入 syn_recv 狀態(tài)
客戶端接收 syn+ack 包后,發(fā)送 ack 包,雙方進入 established 狀態(tài)四次揮手
客戶端 -- FIN --> 服務端, FIN—WAIT
服務端 -- ACK --> 客戶端, CLOSE-WAIT
服務端 -- ACK,FIN --> 客戶端, LAST-ACK
客戶端 -- ACK --> 服務端,CLOSED