## HTTP 消息頭
**`Accept :`** 告知服務器,客戶端可以處理的類型,內容類型用MIME類表示,服務器端使用`Content-Type`應答頭通知客戶端它的選擇。
~~~
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8
# 精確類型,如 text/html
<MIME-type>/<MIME-subtype>
# 半精確類型, 如 image/*
<MIME-type>/*
# 任意類型
*/*
# 值代表優先順序,用相對質量價值表示,又稱作權重,默認值1;0 =< q <= 1
;q=
~~~
**`Accept-Charset :`** 告知服務器,客戶端可以處理的字符集類型。服務器端使用`Content-Type`應答頭通知客戶端它的選擇。瀏覽器通常不會設置此項值,因為每種內容類型的默認值通常都是正確的。
~~~
Accept-Charset: utf-8, iso-8859-1;q=0.5
# 字符集 如 utf-8 iso-8859-1 GBK GBK2312
<charset>
# 任意其他字符集
*
# 值代表優先順序,用相對質量價值表示,又稱作權重,默認值1;0 =< q <= 1
;q=
~~~
**`Accept-Language :`** 告知服務器,客戶端可以理解的自然語言。服務器端使用`Content-Language`應答頭通知客戶端它的選擇。
~~~
Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
# 語言集 en-US fr-CA
<language>
# 任意語言
*
# 值代表優先順序,用相對質量價值表示,又稱作權重,默認值1;0 =< q <= 1
;q=
~~~
**`Accept-Encoding :`** 告知服務器,客戶端可以理解的內容編碼方式。服務器端使用`Content-Encoding`應答頭通知客戶端它的選擇。
~~~
Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5
# 表示采用Lempel-Ziv coding(LZ77)?壓縮算法,以及32位CRC校驗的編碼方式。
gzip
# 采用Lempel-Ziv-Welch(LZW) 壓縮算法。
compress
# 采用?zlib結構和deflate壓縮算法。
deflate
# 表示采用?Brotli算法的編碼方式。
br
# 用于指代自身。
identity
# 任意編碼方式
*
# 值代表優先順序,用相對質量價值表示,又稱作權重,默認值1;0 =< q <= 1
;q=
~~~
**`Accept-Patch :`** 服務器使用此消息頭通知瀏覽器請求的媒體類型(media-type)可以被服務器理解。
~~~
Accept-Patch: application/example, text/example
~~~
**`Accept-Range :`** 服務器使用此消息頭通知瀏覽器自身支持范圍請求,具體值用于定義范圍請求的單位。當瀏覽器發現`Accept-Range`頭時,可以嘗試 **繼續** 中斷了的下載,而不是重新開始。
~~~
Accept-Ranges: bytes
# 范圍請求的單位是 bytes (字節)。
bytes
# 不支持任何范圍的請求
none
~~~
**`Age :`** 消息對象在緩存代理中存貯的時長,以秒為單位。.
~~~html
Age: 24
# 非負整數
<delta-seconds>
~~~
**`Allow:`** 用于枚舉資源所支持的 HTTP 方法的集合。如果 `Allow`?首部字段的值為空,說明資源不接受使用任何 HTTP 方法的請求。
~~~html
Allow: GET, POST, HEAD
# 請求方法的集合。
<http-methods>
~~~
**`Authorization :`** 客戶端發送的消息頭中的憑證,主要用于服務器驗證用戶的代理身份。
~~~html
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
# ?常見的是基本驗證 Basic
<type>
# 生成的憑證,用冒號將用戶名和密碼進行拼接,將第一步生成的結果用?base64方式編碼。
<credentials>
~~~
**`Cache-Control`** 被用于在http請求和響應中,通過指定指令來實現緩存機制。
~~~html
Cache-Control: no-cache, no-store, must-revalidate
# 所有內容都將被緩存(客戶端和代理服務器都可緩存)
public
# 所有內容只有客戶端可以緩存,Cache-Control的默認值
private
# 客戶端緩存內容,但是是否使用緩存則需要經過協商緩存來驗證決定
no-cache
# 緩存內容將在xxx秒后失效
max-age=xxx (xxx is numeric)
# 同 max-age,覆蓋 max-age、Expires,但僅適用于共享緩存,在私有緩存中被忽略。
s-maxage
# 緩存在考慮使用一個陳舊的資源時,必須先驗證它的狀態,已過期的緩存將不被使用。
must-revalidate
~~~
**`Clear-Site-Data : `** 服務器端響應頭信息,表示清除當前請求網站有關的瀏覽器數據(cookie,存儲,緩存)。
~~~html
Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"
# 表示服務端希望刪除本URL原始響應的本地緩存數據
cache
# 表示服務端希望刪除URL響應的所有cookie。
cookie
# 表示服務端希望刪除URL原響應的所有DOM存儲。這包括存儲機制
storage
# 表示服務端希望瀏覽器重新加載本請求 Location.reload
executionContexts
# 表示服務端希望清除原請求響應的所有類型的數據。
*
~~~
**`Connection :`** 決定當前的事務完成后,是否會關閉網絡連接。
~~~
Connection: keep-alive
# 表明客戶端或服務器想要關閉該網絡連接
close
# 表面服務器端會與客戶端保持長連接
keep-alive
~~~
**`Keep-Alive : `** 意味著可以提供有效的HTTP會話,以避免客戶端頻繁的建立`TCP`鏈接。
~~~
Keep-Alive: timeout=5, max=1000
# 指定了一個空閑連接需要保持打開狀態的最小時長(以秒為單位)。
timeout
# 在連接關閉之前,在此連接可以發送的請求的最大值。
max
~~~
**`Content-Length :`** 服務器端發送給客戶端的消息主體的大小,即用十進制數字表示的八位字節的數目。
~~~
Content-Length: 1024
# 消息的長度,用十進制數字表示的八位字節的數目。
<length>
~~~
**`Content-Type :`** 用于指示資源的MIME類型?(media type)
~~~
Content-Type: text/html; charset=utf-8; boundary=something
# 資源或數據的MIME TYPE
media-type
# 字符編碼
charset
# 用于封裝消息的多個部分的邊界。
boundary
<舉例>
boundary=---------------------------974767299852498929531610575
---------------------------974767299852498929531610575
Content-Disposition: form-data; name="description"
some text
---------------------------974767299852498929531610575
Content-Disposition: form-data; name="myFile"; filename="foo.txt"
Content-Type: text/plain
(content of the uploaded file foo.txt)
---------------------------974767299852498929531610575
~~~
**`Cookie :`** 客戶端發送給服務器端的一組消息頭;
~~~html
Cookie: PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1;
# 一系列的名稱/值對,以分號隔開。
<cookie-list>
~~~
**`Date?:`** 一個通用首部,其中包含了報文創建的日期和時間。
~~~
Date: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周幾 幾號 幾月 幾年 時:分:秒 格林尼治標準時間。
~~~
**`ETag :`** 服務端返回的特定版本的標識符,保證每一個資源是唯一的。
~~~
ETag: W/"33A64dF551425fcc55e4d42a148795d9f25f89d4"
# 大小寫敏感, 表示使用弱驗證器
W/
# 實體標簽唯一地表示所請求的資源。 它們是位于雙引號之間的ASCII字符串
<etag\_value>
~~~
**`Location : `** 指定頁面將要定向到的地址,在響應碼為3xx的響應中才會有意義。
~~~html
Location: /index.html
# 相對地址(相對于要訪問的URL)或絕對地址。
<url>
~~~
**`Host :`** 指明了服務器的域名,以及服務器監聽的TCP端口號。
~~~html
Host: developer.cdn.mozilla.net
# 服務器的域名。
<host>
# 服務器監聽的 TCP 端口號。
<port>
~~~
**`Origin :`** 指示了請求來自于哪個站點。主要是用來說明最初請求是從哪里發起的;
~~~html
Origin: https://developer.mozilla.org
# 請求所使用的協議,通常是HTTP或HTTPS協議。
<scheme>
# 域名或 IP 地址
<host>
# 正在監聽的TCP 端口號。
<port>
~~~
**`Referer : `** 服務器請求的原始資源的URI,其用于所有類型的請求。
~~~html
Referer: https://developer.mozilla.org/en-US/docs/Web/JavaScript
# 當前頁面被鏈接而至的前一頁面的絕對路徑或者相對路徑。
<url>
~~~
**`Expires :`** 響應頭包含過期時間, 在此時間之后,緩存過期。
~~~html
Expires: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周幾 幾號 幾月 幾年 時:分:秒 格林尼治標準時間。
~~~
**`Range :`** 告知服務器應該返回文件的哪一部分。
~~~html
Range: bytes=200-1000, 2000-6576, 19000-
# 范圍所采用的單位,通常是字節,bytes
<unit>
# 一個整數,范圍的起始值。
<range-start>
# 一個整數,范圍的結束值。如果不存在,表示此范圍一直延伸到文檔結束。
<range-end>
~~~
**`Vary : `** HTTP響應頭部信息,它決定了對于未來的一個請求頭,應該用一個緩存的回復,還是向源服務器請求一個新的回復。(瀏覽器的User-Agent各不相同,緩存的內容也會有所差異。)
~~~html
Vary: User-Agent
# 所有的請求都被視為唯一并且非緩存的。
*
# 逗號分隔的一系列http頭部名稱,用于確定緩存是否可用。
<header-name>
~~~
**`User-Agent :`** 用來讓服務端識別客戶端的應用類型、操作系統、軟件開發商以及版本號。[`User-Agent詳解`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/User-Agent)
~~~
Mozilla/5.0 (Macintosh; Intel Mac OS?X?x.y; rv:42.0) Gecko/20100101 Firefox/42.0
User-Agent: <product> / <product-version> (<system-information>)<comment>
# 產品識別碼。
<product>
# 產品版本號。
<product-version>
# 系統信息
<system-information>
# 零個或多個關于組成產品信息的注釋。
<comment>
~~~
**`If-Match : `** 一個條件請求,在請求方法為?[`GET`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET "HTTP GET?方法請求指定的資源。使用 GET 的請求應該只用于獲取數據。")和[`HEAD`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/HEAD "HTTP HEAD?方法?請求資源的頭部信息, 并且這些頭部與 HTTP GET 方法請求時返回的一致. 該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載, 以此可以節約帶寬資源.")的情況下,服務器僅在請求的資源滿足此首部列出的?`ETag`值時才會返回資源。 **強比較算法**
~~~html
If-Match: "67ab4354ed217892dd"
# 唯一地表示一份資源的實體標簽。標簽是由 ASCII 字符組成的字符串,用雙引號括起來。
<etag_value>
# 可以指代任意資源
*
~~~
**`If-None-Match : `** 一個條件請求,在請求方法為?[`GET`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET "HTTP GET?方法請求指定的資源。使用 GET 的請求應該只用于獲取數據。")和[`HEAD`](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/HEAD "HTTP HEAD?方法?請求資源的頭部信息, 并且這些頭部與 HTTP GET 方法請求時返回的一致. 該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載, 以此可以節約帶寬資源.")的情況下,服務器僅在請求的資源滿足此首部列出的?`ETag`值時才會返回資源。 **弱比較算法**
~~~html
If-None-Match: "67ab4354ed217892dd"
# 唯一地表示一份資源的實體標簽。標簽是由 ASCII 字符組成的字符串,用雙引號括起來。
<etag_value>
# 可以指代任意資源
*
~~~
**`If-Modified-Since : `** 服務器只在所請求的資源在給定的日期時間之后對內容進行過修改的情況下才會將資源返回。
~~~html
If-Modified-Since: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周幾 幾號 幾月 幾年 時:分:秒 格林尼治標準時間。
~~~
**`If-Range :`** 通常用于斷點續傳的下載過程中,用來自從上次中斷后,確保下載的資源沒有發生改變。
~~~html
If-Range: Wed, 21 Oct 2015 07 : 28 : 00 GMT
#### 周幾 幾號 幾月 幾年 時:分:秒 格林尼治標準時間。
~~~
- 版本控制之Git簡介
- Git工作流程
- Git工作區、暫存區、版本庫
- Git 指令匯總
- Git 忽略文件規則 .gitignore
- pull request
- HTTP簡介
- HTTP - Keep-Alive
- HTTP緩存
- XMLHttpRequest
- Fetch
- 跨域
- HTTP 消息頭
- TCP/IP
- TCP首部
- IP首部
- IP 協議
- TCP/IP漫畫
- 前端開發規范
- 前端開發規范整理
- 前端未來規劃
- HTML思維導圖
- CSS思維導圖
- 布局
- position,float,display的關系和優先級
- line-height、height、font-size
- 移動端適配
- JS 對象
- JS 原型模式 - 創建對象
- JS 預編譯
- 探索JS引擎
- ES