在客戶端發送給服務端請求的時候,客戶端會聲明:我希望這個請求我拿到的數據格式以及數據相關的一些限制是怎樣的。服務端會根據這個做出判斷要返回怎樣的數據。

分類

請求:通過Accept來聲明想要的數據

Accept:指定想要的類型 好幾種格式

Accept-Encoding:數據的編碼方式,限制服務端進行數據的壓縮

Accept-Language:中文、英文等

User-Agent:瀏覽器的信息

返回:Content

Content-Type:對應Accept,從中選擇一種作為真正返回的數據格式

Content-Encoding: 對應Accept-Encoding

Content-Language:根據請求返回語言

我們寫一個簡單的server

這些我們並沒有設置,是瀏覽器幫我們設置的。

User-Agent:Mizilla5.0 默認的頭 ,很多老的web伺服器都只支持這個頭。兼容老的web伺服器。後跟的是用戶的操作系統,AppleWebkit是蘋果公司開發的瀏覽器內核。KHTML是火狐瀏覽器使用的渲染引擎版本。類似於Gecko。Chrome/ 72.0 版本號。後面聲明的Safari,是因為使用的是蘋果公司開發的瀏覽器內核。

在服務端返回時,可以返回一個頭:X-Content-Type-Options:nosniff,基本只會用到這一個值。在早期IE瀏覽器,如果傳到的Content-Type它不接受或者我們沒有聲明對或者我們壓根沒有傳,瀏覽器會預測我們返回的內容是哪個類型,會導致一些安全問題。設置了這個頭,就不會讓瀏覽器主動地去預測了。現在這個頭很少用。

Content-Encoding的好處:傳輸內容沒有變,但是實際傳輸的大小變小。壓縮後,能夠減少網路傳輸的開銷。

發送請求時的Content-Type

發送的Content-Type是在結構里聲明的application,Form Data是瀏覽器幫我們格式化過後的,服務端看到是application的格式後,只需要把body讀出來,轉化成我們想要的數據格式就可以了。

在content-type處,後面有boundary,是分割表單中每一部分的。

Redirect

我們通過URL去訪問一個資源的時候,我們發現這個資源可能已經不在這個地址了。服務端應該告訴客戶端,你所請求的這個資源在哪個地方。然後客戶端再去重新請求那個地方。這樣就可以拿到所要的資源。如果之前開發伺服器的時候已經指定了某一個資源在某個地方,如果要把這個資源搬到別的地方,不應該立刻把這個URL給廢棄了,正常情況下應該告訴客戶端應該去哪個地方找到這個資源。

假如在請求時返回200,則什麼都不會有。只有302的頭才代表要進行跳轉。

在302的情況,仍然是要經過服務端來指定要跳轉到哪裡,302代表臨時跳轉,而不是永久跳轉,如果確定要永久跳轉,就用301。用302時,每次訪問的時候都要經過老地址才能跳到新的地址。但是如果用301,只需要第一次經過老地址跳轉到新地址,後面的都是直接訪問新地址了。

301 302都是從緩存中讀取,而且是儘可能長的時間去保存。301 302的緩存要慎重去做。是用戶使用瀏覽器的情況去定這個緩存時間。


推薦閱讀:
相关文章