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。
我想我做了我需要修复我的应用程序上的空白页所需的一切,但我不知道为什么页面没有在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