跳到主要内容

7. 实体 (Entity)

7 Entity

如果不受 request method 或 response status code 的其他限制, Request 和 Response message MAY 传输 entity. entity 由 entity-header field 和 entity-body 组成, 尽管某些 response 只会包含 entity-header.

在本节中, sender 和 recipient 均指 client 或 server, 具体取决于谁发送和谁接收 entity.

7.1 Entity Header Field

entity-header field 定义关于 entity-body 的元信息; 如果不存在 body, 则定义关于 request 所标识 resource 的元信息. 其中一些元信息是 OPTIONAL; 另一些可能由本规范的某些部分规定为 REQUIRED.

   entity-header  = Allow                    ; Section 14.7
| Content-Encoding ; Section 14.11
| Content-Language ; Section 14.12
| Content-Length ; Section 14.13
| Content-Location ; Section 14.14
| Content-MD5 ; Section 14.15
| Content-Range ; Section 14.16
| Content-Type ; Section 14.17
| Expires ; Section 14.21
| Last-Modified ; Section 14.29
| extension-header

extension-header = message-header

extension-header 机制允许在不改变协议的情况下定义额外 entity-header field, 但不能假定 recipient 能够识别这些字段. recipient SHOULD 忽略无法识别的 header field, transparent proxy MUST 转发这些字段.

7.2 Entity Body

随 HTTP request 或 response 发送的 entity-body (如果存在), 采用 entity-header field 所定义的格式和编码.

   entity-body    = *OCTET

如第 4.3 节所述, 只有当 message 中存在 message-body 时, entity-body 才会存在. entity-body 通过对 message-body 解码任何可能已应用的 Transfer-Encoding 得到, 这些 Transfer-Encoding 用于确保 message 安全且正确传输.

7.2.1 类型

当 message 包含 entity-body 时, 该 body 的数据类型通过 Content-Type 和 Content-Encoding header field 确定. 这些字段定义一个两层有序编码模型:

   entity-body := Content-Encoding( Content-Type( data ) )

Content-Type 指定底层数据的 media type. Content-Encoding 可用于指示应用到数据的任何额外 content coding, 通常用于数据压缩, 且这些编码是所请求 resource 的属性. 不存在默认编码.

任何包含 entity-body 的 HTTP/1.1 message SHOULD 包含一个 Content-Type header field, 用于定义该 body 的 media type. 当且仅当 Content-Type field 未给出 media type 时, recipient MAY 尝试通过检查其内容和/或用于标识 resource 的 URI 的名称扩展名来猜测 media type. 如果 media type 仍未知, recipient SHOULD 将其视为 "application/octet-stream" 类型.

7.2.2 Entity Length

message 的 entity-length 是应用任何 transfer-coding 之前 message-body 的长度. 第 4.4 节定义了如何确定 message-body 的 transfer-length.