nginx 304 Not Modified
时间: 2024-12-31 16:43:58 浏览: 117
### Nginx 中 304 Not Modified 状态码的原因
当客户端发起请求时,如果资源自上次获取以来未发生任何更改,则服务器会返回 `304 Not Modified` 状态码。这表明所请求的内容已经在客户端缓存中存在最新版本,无需再次传输整个响应体[^1]。
具体来说:
- 客户端首次访问某个URL时,服务器正常返回200状态码并附带相应实体数据;
- 如果该次响应头包含了诸如 ETag 或 Last-Modified 这样的字段信息用于标识资源的状态;
- 当后续同一客户端对该 URL 发起相同类型的 GET 请求,并且携带 If-None-Match (对应ETag) 或者 If-Modified-Since (对应Last-Modified),而此时服务端检测到实际资源确实未曾变动过,
那么就会触发此机制从而只给出304通知而非重新发送全部内容。
### 解决方案
为了确保每次都能获得最新的资源而不是依赖于浏览器缓存,在某些场景下可以采取措施来规避这种情况的发生:
#### 方法一:附加唯一参数
通过在链接后面追加一个独一无二的时间戳或者其他形式的随机字符串作为查询参数,使得每一次请求都看起来像是全新的请求,这样就能绕开缓存逻辑强制刷新页面中的指定组件或文件:
```html
<script src="example.js?version=timestamp"></script>
```
#### 方法二:调整 HTTP 缓存控制策略
可以通过设置适当的 Cache-Control 和 Expires 头部来自定义资源的有效期以及是否应该被存储至临时介质内;对于那些不希望长期保存的数据流而言,可将其 max-age 设置得非常短甚至直接禁用公共/私有级别的缓存功能:
```nginx
location ~* \.(css|js)$ {
expires -1;
}
```
以上两种方式均能有效应对因304引起的更新延迟现象,但需注意权衡性能损耗与用户体验之间的关系。
阅读全文
相关推荐


















