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 节

另见