Prefer 頭

HTTP Prefer 頭允許客戶端在請求處理期間指定對特定伺服器行為的偏好。

注意:瀏覽器不處理 PreferPreference-Applied 頭:它們用於定製的、特定於實現的客戶端。在生產環境中依賴此頭之前,請確保客戶端和伺服器都支援它。

伺服器應悄悄地忽略它們不支援的偏好,就好像該頭不存在一樣。

頭型別 請求頭
禁止的頭名稱

語法

http
Prefer: <preference>

指令

respond-async

客戶端偏好非同步處理。例如,伺服器可能響應 202 Accepted 響應,表示請求已被接受,同時包含 Location 頭,其中包含客戶端可用於監控處理狀態的 URL。

return=minimal

請求伺服器返回最少內容(僅包含頭的響應)。

return=representation

請求響應中包含完整的資源表示。

wait=<秒數>

客戶端期望伺服器從收到請求時起提供響應的時間。如果還提供了 respond-async 偏好,如果處理請求將超過等待時間,伺服器應非同步響應。否則,伺服器應認為客戶端將在 wait 時間後超時(響應行為取決於伺服器實現)。

handling=lenient

客戶端希望伺服器對請求的處理應用寬鬆的驗證和錯誤處理。

handling=strict

客戶端希望伺服器對請求的處理應用嚴格的驗證和錯誤處理。

自定義偏好

供應商或應用程式可以定義自己的偏好以適應特定需求。例如,Prefer: timezone=America/Los_Angeles

示例

請求最小響應

以下請求要求最小響應。這通常是僅包含頭的響應(與 return=representation 不同,後者在響應體中包含表示)

http
POST /resource HTTP/1.1
Host: example.com
Content-Type: application/json
Prefer: return=minimal

{"id":123, "name": "abc"}

伺服器響應 201,但不包含任何響應體。Location 頭包含一個 URL,其中包含新建立資源的位置。無需包含 Preference-Applied 頭,因為響應體的缺失顯而易見。

http
HTTP/1.1 201 Created
Location: /resource?id=123

請求非同步處理

此示例請求伺服器啟動非同步處理任務

http
POST /process HTTP/1.1
Host: example.com
Prefer: respond-async

{
  "task": "check-broken-links"
}

伺服器響應 202 Accepted 響應,表示請求已被接受但尚未完成非同步執行。一個 Location 頭指向一個狀態監視器,表示處理的狀態。

http
HTTP/1.1 202 Accepted
Location: http://example.com/tasks/123/status

提供多個偏好

以下請求包含兩個偏好;timezone=Jupiter/Red_Spot 指示客戶端的時區偏好,以及 handling=strict 用於嚴格驗證。

http
GET /events HTTP/1.1
Host: example.com
Prefer: handling=strict, timezone=Jupiter/Red_Spot

在此實現中,無效的時區將丟擲錯誤。

http
HTTP/1.1 400 Bad Request

規範

規範
未知規範
# 第 2 節

另見