我正在尝试请求我的REST API,火狐没有问题,但在Chrome中我无法让浏览器工作,总是抛出200 OK,因为没有if-none-match (或类似的)头被发送到服务器。

有了火狐,我得到了完美的304。

我想我遗漏了一些东西,我试着用Cache-Control: max-age=10测试,但是什么都没有。
发布于 2015-01-20 05:27:50
Chrome可能不会发送If-None-Match的一个原因是,当响应包含"HTTP/1.0“而不是"HTTP/1.1”状态行时。一些服务器,比如Django的开发服务器,会发送较旧的头文件(可能是因为它们不支持keep-alive),当它们这样做时,ETags就不能在Chrome中工作了。

在Response Headers部分,点击查看源,而不是解析的版本。第一行可能会显示类似HTTP/1.1 200 OK的内容-如果显示为HTTP/1.0 200 OK,Chrome似乎忽略了任何ETag头文件,并且不会在下一次加载此资源时使用它。
可能还有其他原因(例如,确保您的ETag标头值是在引号内发送的),但在我的例子中,我删除了所有其他变量,这是一个重要的原因。
更新:看看你的截图,似乎这就是你的情况(来自Python的HTTP1.0服务器)!
假设您正在使用Django,在本地设置文件中添加以下技巧,否则您将不得不在您和./manage.py runserver守护进程之间添加一个实际的HTTP/1.1代理。这个变通方法是monkey patches,关键的WSGI类,由Django内部使用,使它发送一个更有用的状态行:
# HACK: without HTTP/1.1, Chrome ignores certain cache headers during development!
# see https://stackoverflow.com/a/28033770/179583 for a bit more discussion.
from wsgiref import simple_server
simple_server.ServerHandler.http_version = "1.1"发布于 2015-04-14 13:03:32
还要检查浏览器中是否禁用了缓存,就像开发网站时经常做的那样,这样您就可以始终看到最新的内容。
发布于 2016-11-27 05:57:54
Chrome也没有为我发送“If-None-Match”头。我没有任何缓存控制标头。我关闭了浏览器,再次打开它,它开始像预期的那样发送'If-None-Match‘头。因此,重新启动浏览器是检查您是否遇到此类问题的另一个选择。
https://stackoverflow.com/questions/22733905
复制相似问题