4. 状态码定义 (Status Code Definitions)
4.1. 304 Not Modified
304 (Not Modified) 状态码表示已经收到一个条件 GET 或 HEAD 请求, 如果不是因为条件求值为 false, 该请求本应产生 200 (OK) 响应. 换言之, 服务器无需传输目标资源的表示, 因为该请求表明发起条件请求的客户端已经拥有一个有效表示; 因此服务器将客户端重定向为使用该已存储表示, 就像它是 200 (OK) 响应的 payload 一样.
生成 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 响应不能包含 message-body; 它总是在头字段之后的第一个空行处终止.
4.2. 412 Precondition Failed
412 (Precondition Failed) 状态码表示请求头字段中给出的一个或多个条件在服务器上测试时求值为 false. 该响应码允许客户端对当前资源状态 (其当前表示和元数据) 设置前置条件, 从而在目标资源处于非预期状态时阻止请求方法被应用.