前端學習(七十八) DOM-HTTP(Dom)
HTTP
全稱:Hypertext Transfer Protocol,超文字傳輸協議
- 應用層協議
- 基於TCP/IP
- 規定了客戶端與伺服器的資料通訊格式
- 用於傳輸超媒體文件
HTTP會話流程
- 建立連結
- 傳送請求,等待應答
- 處理請求,返回應答
HTTP訊息
請求(request):客戶端向伺服器傳送
應答(response):來自伺服器的應答
HTTP請求
起始行分為:HTTP傳輸方法(get,post),請求目標,HTTP版本
還有請求頭,請求體
HTTP應答
狀態行分為:HTTP版本,狀態碼,狀態文字
還有響應頭,響應體
狀態碼
- 101:協議轉換
- 200:請求成功
- 301:資源永久轉移
- 302:資源臨時轉移
- 304:當前使用的版本沒有被更新,快取相關
- 400:不符合定義,比如引數不對,引數個數不對
- 403:訪問的資源不被允許被訪問
- 404:訪問的資源不存在
- 405:發起的請求伺服器不支援,例如傳送的是get,伺服器支援的是post
- 413:請求體太長了
- 415:媒體型別伺服器不支援
- 500:伺服器內部出錯
- 502:閘道器錯誤
- 503:當前的服務不可用
- 504:超時
HTTP/2幀
- 將HTTP/1.X訊息分成幀並嵌入到流(stream)中
- 資料幀和報頭幀分離,允許報頭壓縮
- 可多路複用
HTTP快取
優勢:減少網路頻寬消耗,降低伺服器壓力,減少網路延遲,提升頁面開啟速度
瀏覽器快取機制
快取規則
新鮮度:快取副本有效期,稱為:過期策略
校驗值:驗證校驗標誌Etag,稱為:驗證策略
使用方法
- HtML Meta標籤中定義
- HTTP報頭中定義
狀態碼
通用
Pragma(HTTP/1.0):控制快取行為,常用為no-cache,不快取
Cache-Control:控制快取行為,非常優先,如果跟其他規則衝突,會將其他規則覆蓋
請求頭中相關的欄位
if-Match:Etag是否一致
if-None-match:Etag是否一致
if-Modified-Since:資源最後更新時間是否一致
if_unmodified-Since:資源最後更新時間是否不一致
響應頭
Etag:用於快取校驗的值
實體首部
Expires(HTTP/1.0):資源過期時間
Last-Modified:資源最後一次修改時間
Cache-Control
request中常見指令
no-cache:不使用快取
no-store:不會被儲存到快取中
max-age"="delta-seconds:接收一個age不大於delta-seconds秒的資源
max-stale["="delta-seconds]:告知伺服器客戶端可以接收一個超過delta-seconds秒的資源,可為空
min-fresh"="delta-seconds:接收一個小於delta-seconds秒內被更新的資源
no-transform:獲取實體資料沒被轉換過的資源
only-if-cached:如果有快取,則獲取快取內容
cache-extension:自定義擴充套件值
response常見的指令
public(常見):任何情況下都要快取該資源
private["="<"1#field-name<">]:指定filed欄位開放給指定使用者(share-user)做快取使用
no-cache["="<"1#field-name<">](常見):不使用快取,可指定filed
no-store:不會被儲存到快取中
no-transorm:告知客戶端快取檔案時不能對實體資料做轉換
must-revalidate:當前資源必須向原始伺服器發驗證請求,若失敗則返回504
proxy-revalidate:同上,但僅應用於共享快取
max-age"="delta-seconds(常見):告知客戶端資源delta-seconds秒內是新鮮的
s-max-age"="delta-seconds:同上,但僅應用於共享快取
cache-extension:自定義擴充套件值
HTTP Cookie
瀏覽器儲存在使用者電腦上的一小塊資料
Cookie實際應用
- 會話狀態管理
- 個性化設定
- 瀏覽器行為跟蹤等
缺陷
- 大小不超過4KB
- 安全性
- 流量代價
替代品
- Web storage
- IndexDb
Cookie設定
document.cookie,即可設定cookie,返回的是一個字串,通常封裝成JSON物件格式化
Cookie格式
value,值(鍵值對組成)
通過document.cookie取出的是一個字串,其中鍵值對的寫法是:name=value,但是cookie本身不對這個鍵值對去做校驗,也就是不按name=value寫也不會報錯,但是解析會很麻煩,推薦還是name=value的寫法寫,這樣,我們就可以通過;號,分割每一個鍵值對,然後通過等號獲取鍵和值
expires,cookie過期時間
- 過期時間,預設為當前會話,UTC時間格式
domain(必填),cookie將要被髮送到的一個或一些域名
- 當前域,或子域
path(必填),請求的資源中必須包含的指定路徑時,才傳送cookie
secure,安全標記,沒有值,https時生效
作用域
假如有兩個子站:a.163.com,b.163.com
當domain指向a.163.com時,預設將cookie寫入a.163.com
當domain指向b.163.com時,預設將cookie寫入b.163.com
當domain指向163.com時,預設將cookie同時寫入a.163.com和b.163.com
同理,path也是指定地址