Skip to main content

7. Entity (实体)

如果不受请求方法或响应状态码的限制,请求和响应消息可以 (MAY) 传输实体。实体由实体头字段和实体主体组成,尽管某些响应将仅包括实体头。

在本节中,发送方和接收方都指客户端或服务器,具体取决于谁发送和谁接收实体。

7.1 Entity Header Fields (实体头字段)

实体头字段定义关于实体主体的元信息,如果不存在主体,则定义关于请求标识的资源的元信息。其中一些元信息是可选的 (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

扩展头机制允许在不更改协议的情况下定义额外的实体头字段,但不能假定接收方能够识别这些字段。接收方应该 (SHOULD) 忽略无法识别的头字段,并且透明代理必须 (MUST) 转发它们。

7.2 Entity Body (实体主体)

随 HTTP 请求或响应发送的实体主体(如果有)采用由实体头字段定义的格式和编码。

entity-body    = *OCTET

仅当消息主体存在时,实体主体才会存在于消息中,如第 4.3 节所述。实体主体通过解码可能已应用以确保消息安全和正确传输的任何传输编码 (Transfer-Encoding) 从消息主体中获得。

7.2.1 Type (类型)

当实体主体包含在消息中时,该主体的数据类型通过头字段 Content-Type 和 Content-Encoding 确定。这些定义了一个两层的有序编码模型:

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

Content-Type 指定底层数据的媒体类型。Content-Encoding 可用于指示应用于数据的任何额外内容编码,通常用于数据压缩,这是请求资源的属性。没有默认编码。

任何包含实体主体的 HTTP/1.1 消息应该 (SHOULD) 包括定义该主体媒体类型的 Content-Type 头字段。当且仅当 Content-Type 字段未给出媒体类型时,接收方可以 (MAY) 尝试通过检查其内容和/或用于标识资源的 URI 的名称扩展名来猜测媒体类型。如果媒体类型仍然未知,接收方应该 (SHOULD) 将其视为类型 "application/octet-stream"。

7.2.2 Entity Length (实体长度)

实体的实体长度 (entity-length) 是实体主体的长度,或者在应用任何传输编码之前将是实体主体的长度。第 4.4 节定义了如何确定消息的传输长度。