4. Status Code Definitions (状态码定义)
4.1. 304 Not Modified (未修改)
304 (Not Modified) 状态码表示已收到条件 GET 或 HEAD 请求, 如果不是因为条件评估为 false, 本应该导致 200 (OK) 响应。换句话说, 服务器不需要传输目标资源的表示, 因为请求表明发出条件请求的客户端已经拥有有效的表示; 因此服务器将客户端重定向以使用该存储的表示, 就好像它是 200 (OK) 响应的有效负载一样。
生成 304 响应的服务器必须 (MUST) 生成以下任何在对同一请求的 200 (OK) 响应中会发送的头字段: Cache-Control, Content-Location, Date, ETag, Expires 和 Vary。
由于 304 响应的目标是在接收方已经拥有一个或多个缓存表示时最小化信息传输, 因此发送方不应该 (SHOULD NOT) 生成除上述列出的字段之外的表示元数据, 除非该元数据存在的目的是指导缓存更新 (例如, 如果响应没有 ETag 字段, 则 Last-Modified 可能很有用)。
缓存接收 304 响应的要求在 [RFC7234] 的第 4.3.4 节中定义。如果条件请求源自出站客户端 (例如具有自己的缓存的用户代理向共享代理发送条件 GET), 则代理应该 (SHOULD) 将 304 响应转发给该客户端。
304 响应不能包含消息主体; 它总是在头字段后的第一个空行处终止。
4.2. 412 Precondition Failed (前提条件失败)
412 (Precondition Failed) 状态码表示在服务器上测试时, 请求头字段中给出的一个或多个条件评估为 false。此响应码允许客户端对当前资源状态 (其当前表示和元数据) 设置前提条件, 从而在目标资源处于意外状态时阻止应用请求方法。