图片
1. http code 304 Not Modified
HTTP 状态码 304 Not Modified 是一个无内容(no-content)的状态码,表示客户端发送了一个条件性请求(conditional request),并且服务器发现自从上次请求以来资源并没有改变,因此返回这个状态码而不是重复传输相同的数据。
当客户端(通常是浏览器)向服务器请求一个资源时,如果之前已经缓存过这个资源,那么它会在请求头中包含一些信息,比如 If-Modified-Since 或 If-None-Match,以询问服务器这个资源是否已经被修改。
- If-Modified-Since: 客户端告诉服务器自从某个日期之后它就没有获取过这个资源了。
- If-None-Match: 客户端告诉服务器它有一个资源的特定版本(通过 ETag 标识),并询问这个版本是否仍然有效。
如果服务器发现请求的资源自上次请求以来没有变化,它就会发送一个 304 Not Modified 响应,并且不包含资源的实际内容。这样可以减少带宽消耗,提高性能,因为客户端可以直接使用其缓存的副本。
1.1. 示例
1.1.1. 客户端请求头示例:
GET /example.html HTTP/1.1
Host: www.example.com
If-Modified-Since: Tue, 15 Nov 2022 12:45:26 GMT
1.1.2. 服务器响应头示例:
HTTP/1.1 304 Not Modified
Date: Tue, 28 Oct 2024 12:30:00 GMT
Last-Modified: Tue, 15 Nov 2022 12:45:26 GMT
Cache-Control: max-age=3600
在这个例子中,客户端提供了 If-Modified-Since 头部,表明它有一个自从指定日期以来没有更新过的资源副本。服务器检查了这个资源并确认自那个日期后资源没有被修改过,因此返回了 304 Not Modified 响应。
对于前端开发者来说,理解 304 Not Modifnce 响应可以帮助优化应用性能,尤其是在网络请求频繁的情况下。合理利用 HTTP 缓存机制能够显著减少数据传输量,提升用户体验。