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.