nginx 304 not modified 怎样解决

 我来答
yangjinlong76
活跃答主

2017-10-22 · 非职业答题人
知道顶级答主
回答量:5.7万
采纳率:94%
帮助的人:1.7亿
展开全部
你好,
HTTP304错误的详细解释NotModified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。如果客户端在请求一个文件的时候,发现自己缓存的文件有LastModified,那么在请求中会包含IfModifiedSince,这个时间就是缓存文件的LastModified。因此,如果请求中包含IfModifiedSince,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回304还是200。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
己学好4
2017-10-23 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:91%
帮助的人:5118万
展开全部
当你第一次访问时,服务器会返回给你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等头信息来进行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式