大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 defage cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- 刘太华 wd 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 先谢谢你的回复。我看明白了人家的回复,他说的一直是Last-Modified和If-Modifiy-Since的问题,而不是expires的问题。我想我邮件里说的已经很清楚了,我的问题是expires,而不是Last-Modified和If-Modifiy-Since。另外它们的作用都是不一样的,无法相提并论,expires是缓存什么时候过期,Last-Modified和If-Modifiy-Since是去验证文件是否被修改过,如果expires未过期,缓存有效,还去验证干什么?相当于expires白设置了,不是多余是什么?在 2013-02-26 23:35:59,wd <...@wdicc.com> 写道: 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 defage cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- 刘太华 wd 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 先谢谢你的回复。我看明白了人家的回复,他说的一直是Last-Modified和If-Modifiy-Since的问题,而不是expires的问题。我想我邮件里说的已经很清楚了,我的问题是expires,而不是Last-Modified和If-Modifiy-Since。另外它们的作用都是不一样的,无法相提并论,expires是缓存什么时候过期,Last-Modified和If-Modifiy-Since是去验证文件是否被修改过,如果expires未过期,缓存有效,还去验证干什么?相当于expires白设置了,不是多余是什么?在 2013-02-26 23:35:59,wd <...@wdicc.com> 写道: 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- 刘太华 wd 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 先谢谢你的回复。我看明白了人家的回复,他说的一直是Last-Modified和If-Modifiy-Since的问题,而不是expires的问题。我想我邮件里说的已经很清楚了,我的问题是expires,而不是Last-Modified和If-Modifiy-Since。另外它们的作用都是不一样的,无法相提并论,expires是缓存什么时候过期,Last-Modified和If-Modifiy-Since是去验证文件是否被修改过,如果expires未过期,缓存有效,还去验证干什么?相当于expires白设置了,不是多余是什么?在 2013-02-26 23:35:59,wd <...@wdicc.com> 写道: 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- 刘太华 wd 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 先谢谢你的回复。我看明白了人家的回复,他说的一直是Last-Modified和If-Modifiy-Since的问题,而不是expires的问题。我想我邮件里说的已经很清楚了,我的问题是expires,而不是Last-Modified和If-Modifiy-Since。另外它们的作用都是不一样的,无法相提并论,expires是缓存什么时候过期,Last-Modified和If-Modifiy-Since是去验证文件是否被修改过,如果expires未过期,缓存有效,还去验证干什么?相当于expires白设置了,不是多余是什么?在 2013-02-26 23:35:59,wd <...@wdicc.com> 写道: 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- 刘太华
是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 先谢谢你的回复。我看明白了人家的回复,他说的一直是Last-Modified和If-Modifiy-Since的问题,而不是expires的问题。我想我邮件里说的已经很清楚了,我的问题是expires,而不是Last-Modified和If-Modifiy-Since。另外它们的作用都是不一样的,无法相提并论,expires是缓存什么时候过期,Last-Modified和If-Modifiy-Since是去验证文件是否被修改过,如果expires未过期,缓存有效,还去验证干什么?相当于expires白设置了,不是多余是什么?在 2013-02-26 23:35:59,wd <...@wdicc.com> 写道: 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 先谢谢你的回复。我看明白了人家的回复,他说的一直是Last-Modified和If-Modifiy-Since的问题,而不是expires的问题。我想我邮件里说的已经很清楚了,我的问题是expires,而不是Last-Modified和If-Modifiy-Since。另外它们的作用都是不一样的,无法相提并论,expires是缓存什么时候过期,Last-Modified和If-Modifiy-Since是去验证文件是否被修改过,如果expires未过期,缓存有效,还去验证干什么?相当于expires白设置了,不是多余是什么?在 2013-02-26 23:35:59,wd <...@wdicc.com> 写道: 你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
你仔细看人家的回复了么,是有内容和无内容的区别,怎么会多余呢?不知道流量多值钱么。2013/2/26 haoyun <13693...@163.com> 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 13693148344 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 lancelijade 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 kindy61 nginx 里的 expires 指令只负责添加一些 http 响应头。具体浏览器何时使用哪些头,可以参考http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate https://developers.google.com/speed/articles/caching 2013/3/1 Lance <lance...@gmail.com> 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。 Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin) 13693148344 特别的感谢 Lance 和 kindy,不但解答了疑问,还给提供了很好的参考资料^_^ !!!!在 2013-03-01 15:03:16,Lance <lance...@gmail.com> 写道: 我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- #xA0要查看更多选项,请访问 https://groups.google.com/groups/opt_out。 -- - - - - - - - - - - - -林青(Kindy Lin)
我理解是浏览器对用户按F5时的理解是用户有意去服务器验证,于是发送一个请求。如果用户不是通过按F5,而是在页面里自动引用(比如图片),浏览器就不会发送这个请求。Lance 2013/2/27 haoyun <13693...@163.com> 谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
谢谢刘太华兄的回复,你说的不错,是有优先级的,不过按照我的测试好像是Last-Modified优先,不过按照常理,应该是expires优先啊,要不就没有必要设置过期了。我也谷歌过,都是天下文章一大抄,没有结果,看来只能看RFC2616了,全是E文,有点困难啊,我刚买了一本<<HTTP权威指南>>中文的,不知如何!嗨。。。 再次感谢!在 2013-02-26 20:14:18,"刘太华" <de...@gmail.com> 写道: cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
cache-control, expires, etag, 等几个控制缓存的头, 似乎是有分优先的, 所以需要确认你的expires真的优先起作用了, 而不是在其他头的控制之下去服务器做请求 我记得优先好像是 no-cache>Expires>refresh_pattern>Last-Modified, 很久不做web server相关配置了, 所以楼主自己google下浏览器标准确认下. 在 2013年2月26日下午2:42,haoyun <13693...@163.com>写道: 是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
是的,这个Last-Modified和ETag是用于验证请求内容是否发生过变化,没错。但是expires设置的是浏览器缓存的有效期,如果缓存在有效期内,还发送请求去验证内容的话,那expires就不起作用了,设计它就应该算是多余的了。其实从字面意思理解也是“过期”,即“缓存过期”。如果设置了expires,还是避免不了去服务器验证,那就不需要它了不是。 在 2013-02-26 14:29:02,smallfish <small...@gmail.com> 写道: 不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
不管是否过期,浏览器都会发起一次请求(会比较last-modify/etag之类的)。区别在于服务端是直接返回304(无内容)还是200(有内容)。返回304以后浏览器则使用缓存。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
嗯,是啊。304的响应是对的,这个我知道,但是expires的设置好像没有起到作用,浏览器在缓存有效(expires未过期)的情况下,还是发出了请求。我前面写的过期时间是明天,可是还是发出请求了,正常应该使用浏览器缓存,不发请求啊!在 2013-02-26 13:49:55,smallfish <small...@gmail.com> 写道: 服务端返回304是对的(f5的行为本来就如此),如果要强制刷新就得ctrl+f5。你可以搜一下HTTP 304的解释。--smallfish http://chenxiaoyu.org 2013/2/26 haoyun <13693...@163.com> 大家好我在nginx配置文件里的location /里设置了expires 1d;想让客户端浏览器缓存一天的内容,但是在浏览器(chrome、IE9)里测试缓存的时候,响应头里确实有如下头: Expires:Wed, 27 Feb 2013 05:09:07 GMT Cache-Control:max-age=86400 Last-Modified:Sat, 25 Aug 2012 22:48:18 GMT 随后的请求头: Cache-Control:max-age=0 If-Modified-Since: Wed, 29 Dec 2010 09:01:05 GMT 为什么再次请求(地址栏回车或F5)时不使用浏览器缓存,而是去请求服务器,服务器返回304,明明缓存还没到期,这个问题困扰我很久了。可能问题有点偏,但是也算是和nginx相关的,请各位朋友指点下,如果没时间解答,给个权威点的参考链接或资料也行,非常感谢! 来自网易手机号码邮箱了解更多 -- sp 要查看更多选项,请访问 https://groups.google.com/groups/opt_out。