Nginx - "强制"返回200缓存响应而不是304

6

是否有办法强制对静态文件返回200(缓存)响应而不是304未修改? 如果是这样,您可能可以节省大量服务器请求,并显著加快返回访问者的加载时间。

3个回答

4
我发现仅使用Expires无法正确设置行为。以下是一个确保有效的方法:
# Set cache
expires 1M;
add_header Pragma public;
add_header Cache-Control "public";

这将放置在你的位置块中..

我认为关于这个问题有很多误导性的信息,其中之一是错误地认为200(缓存)与200是相同的。

根据我的理解:

200 - 服务器请求 - 传输成功 200(缓存)- 成功 - 没有服务器请求(从缓存中获取) 304 - 服务器请求 - 无传输(未修改)

据我所知,200(缓存)完全不需要服务器请求。


1
在您提供静态文件的位置中,使用Nginx设置expires指令。浏览器在到达过期时间之前不会再次向服务器发出请求。此时,如果静态文件未改变,则服务器仍可能返回304响应,并且必须等到到达过期时间后才会再次检查。
顺便说一下,200响应代码仅表示正在返回所请求的资源。这与是否发送任何缓存头与HTTP响应无关。

我将过期时间设置为2周,但是Google Chrome的开发工具仍然显示304请求而不是200代码。它是否提供了错误信息? - ustun

0

200不是缓存响应,它表示成功并要求响应包含结果。304表示未修改的资源;也就是说,您已经拥有它,因此不返回任何内容。因此,您建议的操作应该导致所有伪装成200的304失败。即使它没有这样做,使用虚假的200响应也无法节省任何请求或加快速度。

编辑:在某些情况下,200表示已成功从缓存中获取资源...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接