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 上