Prefer 頭
HTTP Prefer 頭允許客戶端在請求處理期間指定對特定伺服器行為的偏好。
注意:瀏覽器不處理 Prefer 和 Preference-Applied 頭:它們用於定製的、特定於實現的客戶端。在生產環境中依賴此頭之前,請確保客戶端和伺服器都支援它。
伺服器應悄悄地忽略它們不支援的偏好,就好像該頭不存在一樣。
語法
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 不同,後者在響應體中包含表示)
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/1.1 201 Created
Location: /resource?id=123
請求非同步處理
此示例請求伺服器啟動非同步處理任務
POST /process HTTP/1.1
Host: example.com
Prefer: respond-async
{
"task": "check-broken-links"
}
伺服器響應 202 Accepted 響應,表示請求已被接受但尚未完成非同步執行。一個 Location 頭指向一個狀態監視器,表示處理的狀態。
HTTP/1.1 202 Accepted
Location: http://example.com/tasks/123/status
提供多個偏好
以下請求包含兩個偏好;timezone=Jupiter/Red_Spot 指示客戶端的時區偏好,以及 handling=strict 用於嚴格驗證。
GET /events HTTP/1.1
Host: example.com
Prefer: handling=strict, timezone=Jupiter/Red_Spot
在此實現中,無效的時區將丟擲錯誤。
HTTP/1.1 400 Bad Request
規範
| 規範 |
|---|
| 未知規範 # 第 2 節 |
另見
Preference-Applied- Prefer 頭 在 docs.oasis-open.org 上
- Prefer 頭 在 docs.postgrest.org 上