Http系列:內容協商與資源表述

前言:

HTTP協議是超文本傳輸協議的縮寫,英文是Hyper Text Transfer Protocol。超文本就是一種資源的表述,它(HTML)是從WEB服務器傳輸到本地瀏覽器用於展現。
restful架構,它是http設計師所遵循的架構。全稱爲:REpresentational State Transfer,翻譯過來就是:表現層狀態轉移。用@Ivony老師的一句話歸納就是:html

URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操做。git

它也是在描述資源狀態的一種轉移。因爲一種資源有着多種狀態,因此客戶端在接收一種資源的轉移時是須要進行協商的。好比在中國訪問一個url時是接收的資源多是中文的,而在其餘國家訪問同一個url時得到的資源多是他們國家的語言。github

內容協商

每一個URL指向的資源能夠是任何事物,能夠有多種不一樣的表述,例如一份文檔能夠有不一樣語言的翻譯、不一樣的媒體格式、能夠針對不一樣的瀏覽器提供不一樣的壓縮編碼等web

內容協商的兩種方式

  • Proactive 主動式內容協商:指由客戶端如今請求頭部中提出須要的表述形式,而服務器根據這些請求頭部提供特定的representation表述。
    舉例:

Accept-Language:en表示客戶端要求URI是中文的;
Accept-Encoding:br表示客戶端能夠接受br類型的壓縮方式。算法

而服務端接收到客戶端的要求後,會返回符合要求的響應。瀏覽器

  • Reactive 響應式內容協商:指服務器返回300Multiple Choices或者406 Not Acceptable,由客戶端選擇一種表述URI使用。
    舉例:

    客戶端將要求發給服務器,服務器以爲本身不能太武斷,因而經過300響應碼返回了一個列表給客戶端,供客戶端選擇。
    客戶端再從返回的列表中,再次選擇一個URL,好比URLe。再次訪問服務器,服務器返回正確響應。

常見的協商要素

  • 質量因子q:內容的質量、可接受類型的優先級
    一、內容質量。舉例,客戶端發起一個圖片的請求,這個圖片只供快速瀏覽用的,那麼就能夠作很是高的壓縮比,這時的質量q就能夠比較低。若是這個圖片用做醫學的,那麼q就比較大,由於不能容忍醫用照片模糊以損失大量的細節。
    二、可接受類型的優先級。舉例:有一個URI即支持中文,又支持英文。可是但願優先顯示中文,就能用q來表示。服務器

  • 媒體資源的MIME類型及質量因子
    一、Accept: text/html, application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    二、Axxept: text/html, application/xhtml+xml,application/xml;1=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3restful

  • 內容編碼:主要指壓縮算法
    Accept-Encoding: gzip. deflate, br架構

  • 表述語言
    一、Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
    二、Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2app

資源表述的元數據頭部

  • 媒體類型、編碼
    Content-Type: text/html; chareset=utf-8
  • 內容編碼
    Content-Encoding: gzip
  • 語言 Content-Language: de-DE, en-CA

總結

內容協商將決定服務器端生成不一樣的HTTP響應體傳輸給客戶端。

備註

更多文章請移步樓主github,若是喜歡請點一下star,對做者也是一種鼓勵

相關文章
相關標籤/搜索