HTTP 304 状态码表示客户端发送了一个带有条件请求的GET方法(通常包括If-Modified-Since或If-None-Match头信息),但是文档未被修改。这意味着自从上次请求后,资源没有更改过。这是一个高效利用带宽的方法,因为如果资源没有改变,服务器就不需要重新传输整个资源。
当客户端缓存了一个资源,并且知道该资源的最后修改时间或ETag(实体标签)时,它可以在后续请求中使用这些信息来询问服务器资源是否已经更新。如果资源没有变化,服务器就会返回一个304状态码,而不是再次发送整个资源内容。这不仅减少了网络流量,也加快了页面加载速度,因为浏览器可以立即从缓存中加载资源,而不需要等待完整的响应。
304响应不应该包含任何消息体,但是它必须包含头部字段Date,除非这个响应是通过1.0协议并且没有头部字段Date的情况下产生的。此外,如果条件GET请求使用了Cache-Control: no-cache指令,那么304响应还应该包含一些头部字段,如Expires, Cache-Control, 和/或Vary,以帮助更新缓存策略。
简而言之,304状态码是一个非常有用的机制,用于优化Web性能和减少不必要的数据传输。