1. 程式人生 > >前端學習(七十八) DOM-HTTP(Dom)

前端學習(七十八) 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也是指定地址