nginx 304 not modified 怎样解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 304 not modified 怎样解决相关的知识,希望对你有一定的参考价值。

参考技术A 你好,
HTTP304错误的详细解释NotModified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。如果客户端在请求一个文件的时候,发现自己缓存的文件有LastModified,那么在请求中会包含IfModifiedSince,这个时间就是缓存文件的LastModified。因此,如果请求中包含IfModifiedSince,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回304还是200。本回答被提问者采纳
参考技术B 当你第一次访问时,服务器会返回给你200状态码,同时在头里追加ETag值给你。浏览器拿到后将其缓存。
下一次再访问时,因浏览器已经有该地址的ETag值了。会将其缓存的ETag值内容放在请求头的If-None-Match中,服务器检查其自身内容的ETag值是否与其一致,如果一致就会返回304状态码,告诉你内容和你保存的一致,没有发生改变过。
举例来说,
C:S,你几岁了?
S:C,我18岁了。
===========
C:S,你几岁了?我猜你18岁了。
S:靠,你知道还问我?(304)
===========
C:S,你几岁了?我猜你18岁了。
S:C,我19岁了。(200)

以上就是200和304的解释。

Cache-Control和Expires则是告诉浏览器缓存这些数据的策略。

drupal则并非是非法hash导致的问题,问题在于gzip上。gzip其实就是gunzip了。ZIP压缩会有个特点,相同的内容重复压缩得到的二进制是不一样的,这和其字典策略相关(猜测,未验证),你可以随便压缩个文件对比2次的ZIP包checksum值是否一致来确认。那么这样就可以解释了,虽然原始内容没有改变,但是传输时因为用了gzip,所以drupal认为原始数据始终在改变,每次返回200也符合我先前所讲的内容。
最后,根据REST的原则,可以看出一些请求是幂等的,一些请求是非幂等的。那么服务器与客户端之间的缓存层,比如CDN也好,drupal,或者nginx等,都会对幂等请求做缓存策略,非幂等请求不做缓存策略。这里如何来控制,则需要服务器端在返回内容时利用好Cache-Control和Expires等头信息来进行。

SailsJs:部署后获得“304 not modified”页面

我正在尝试更新我的SailsJs应用程序来修复我正在使用Heroku的空白页面,但是我没有从浏览器修改状态304。

enter image description here

我想我做了我需要修复我的应用程序上的空白页所需的一切,但我不知道为什么页面没有在Heroku上更新

我的Procfile:

web: node app.js

如果有人可以提供帮助我感激

谢谢!

答案

我认为你不需要修理任何东西。如果您尝试使用POSTMAN或其他浏览器调用相同的URL,则应获得状态200。

另一答案

您可以将其添加到策略中,然后将其应用于您想要的特定页面/请求 - 如果您不想为整个应用程序设置此项。

/API/policies/no cache.就是:

    /**
     * Sets no-cache header in response.
     */
    module.exports = function (req, res, next) {
        sails.log.info("Applying disable cache policy");
        res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
        res.header('Expires', '-1');
        res.header('Pragma', 'no-cache');  
        next();
    };

不要忘记将nocatche包含在config / policy.js中

'*': 'nocatche'

以上是关于nginx 304 not modified 怎样解决的主要内容,如果未能解决你的问题,请参考以下文章

[web] 200 OK (from cache) 与 304 Not Modified

304 Not Modified

304 not modified 缓存问题解决

防止Tomcat中的304 NOT MODIFIED响应

200 OK (from cache) 与 304 Not Modified

If-None-Match 有效时 304 Not Modified