看完讓你有一種恍然大悟醍醐灌頂的感覺 http服務器是什么?( 七 )

上面的 Accpet、 Accept-Language、Accept-Encoding 都是屬于內容協商的請求標頭,我們會在下面說明
Referer
HTTP Referer 屬性是請求標頭的一部分,當瀏覽器向 web 服務器發送請求的時候,一般會帶上 Referer,告訴服務器該網頁是從哪個頁面鏈接過來的,服務器因此可以獲得一些信息用于處理 。
Referer: https://developer.mozilla.org/testpage.htmlUpgrade-Insecure-Requests
Upgrade-Insecure-Requests 是一個請求標頭,用來向服務器端發送信號,表示客戶端優先選擇加密及帶有身份驗證的響應 。
Upgrade-Insecure-Requests: 1If-Modified-Since
HTTP 的 If-Modified-Since 使其成為條件請求:

  • 返回200,只有在給定日期的最后一次修改資源后,服務器才會以200狀態發送回請求的資源 。
  • 如果請求從開始以來沒有被修改過,響應會返回304并且沒有任何響應體
If-Modified-Since 通常會與 If-None-Match 搭配使用,If-Modified-Since 用于確認代理或客戶端擁有的本地資源的有效性 。 獲取資源的更新日期時間,可通過確認首部字段 Last-Modified 來確定 。
大白話說就是如果在 Last-Modified 之后更新了服務器資源,那么服務器會響應200,如果在 Last-Modified 之后沒有更新過資源,則返回 304 。
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMTIf-None-Match
If-None-Match HTTP請求標頭使請求成為條件請求 。 對于 GET 和 HEAD 方法,僅當服務器沒有與給定資源匹配的 ETag 時,服務器才會以200狀態發送回請求的資源 。 對于其他方法,僅當最終現有資源的ETag與列出的任何值都不匹配時,才會處理請求 。
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"ETag 屬于響應標頭,后面進行介紹 。
內容協商內容協商機制是指客戶端和服務器端就響應的資源內容進行交涉,然后提供給客戶端最為適合的資源 。 內容協商會以響應資源的語言、字符集、編碼方式等作為判斷的標準 。
內容協商主要有以下3種類型:
  • 服務器驅動協商(Server-driven Negotiation)
這種協商方式是由服務器端進行內容協商 。 服務器端會根據請求首部字段進行自動處理
  • 客戶端驅動協商(Agent-driven Negotiation)
這種協商方式是由客戶端來進行內容協商 。
  • 透明協商(Transparent Negotiation)
是服務器驅動和客戶端驅動的結合體,是由服務器端和客戶端各自進行內容協商的一種方法 。
內容協商的分類有很多種,主要的幾種類型是 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language 。
Accept
接受請求 HTTP 標頭會通告客戶端其能夠理解的 MIME 類型
那么什么是 MIME 類型呢?在回答這個問題前你應該先了解一下什么是 MIME
MIME: MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的因特網標準 。 MIME 消息能包含文本、圖像、音頻、視頻以及其他應用程序專用的數據 。
也就是說,MIME 類型其實就是一系列消息內容類型的集合 。 那么 MIME 類型都有哪些呢?
文本文件: text/html、text/plain、text/css、application/xhtml+xml、application/xml
圖片文件: image/jpeg、image/gif、image/png
視頻文件: video/mpeg、video/quicktime
應用程序二進制文件: application/octet-stream、application/zip
比如,如果瀏覽器不支持 PNG 圖片的顯示,那 Accept 就不指定image/png,而指定可處理的 image/gif 和 image/jpeg 等圖片類型 。
一般 MIME 類型也會和 q 這個屬性一起使用,q 是什么?q 表示的是權重,來看一個例子
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8這是什么意思呢?若想要給顯示的媒體類型增加優先級,則使用 q= 來額外表示權重值,沒有顯示權重的時候默認值是1.0 ,我給你列個表格你就明白了
qMIME1.0text/html1.0application/xhtml+xml0.9application/xml0.8* / *
也就是說,這是一個放置順序,權重高的在前,低的在后,application/xml;q=0.9 是不可分割的整體 。
Accept-Charset
accept-charset 屬性規定服務器處理表單數據所接受的字符集 。
accept-charset 屬性允許您指定一系列字符集,服務器必須支持這些字符集,從而得以正確解釋表單中的數據 。
該屬性的值是用引號包含字符集名稱列表 。 如果可接受字符集與用戶所使用的字符即不相匹配的話,瀏覽器可以選擇忽略表單或是將該表單區別對待 。

推薦閱讀