nginx 304 not modified 怎样解决
2个回答
展开全部
你好,
HTTP304错误的详细解释NotModified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。如果客户端在请求一个文件的时候,发现自己缓存的文件有LastModified,那么在请求中会包含IfModifiedSince,这个时间就是缓存文件的LastModified。因此,如果请求中包含IfModifiedSince,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回304还是200。
HTTP304错误的详细解释NotModified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。如果客户端在请求一个文件的时候,发现自己缓存的文件有LastModified,那么在请求中会包含IfModifiedSince,这个时间就是缓存文件的LastModified。因此,如果请求中包含IfModifiedSince,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就可以确定是返回304还是200。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当你第一次访问时,服务器会返回给你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等头信息来进行。
下一次再访问时,因浏览器已经有该地址的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等头信息来进行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询