Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 如果没有匹配,则Chrome不会发送_Google Chrome_Firefox_Caching_Xmlhttprequest_Etag - Fatal编程技术网

Google chrome 如果没有匹配,则Chrome不会发送

Google chrome 如果没有匹配,则Chrome不会发送,google-chrome,firefox,caching,xmlhttprequest,etag,Google Chrome,Firefox,Caching,Xmlhttprequest,Etag,我正在尝试对我的REST API进行请求,我对Firefox没有问题,但在Chrome中,我无法让浏览器正常工作,总是抛出200 OK,因为如果没有匹配的(或类似)头,则不会向服务器发送 使用Firefox,我获得了完美的304 我想我错过了一些东西,我尝试了缓存控制:max age=10进行测试,但没有任何结果。如果没有匹配的,Chrome可能不会发送,原因之一是响应包含“HTTP/1.0”而不是“HTTP/1.1”状态行。有些服务器,比如Django的开发服务器,发送一个旧的头文件(可能

我正在尝试对我的REST API进行请求,我对Firefox没有问题,但在Chrome中,我无法让浏览器正常工作,总是抛出
200 OK
,因为如果没有匹配的
(或类似)头,则不会向服务器发送

使用Firefox,我获得了完美的
304


我想我错过了一些东西,我尝试了
缓存控制:max age=10
进行测试,但没有任何结果。

如果没有匹配的
,Chrome可能不会发送
,原因之一是响应包含“HTTP/1.0”而不是“HTTP/1.1”状态行。有些服务器,比如Django的开发服务器,发送一个旧的头文件(可能是因为它们不支持保持活动),当它们这样做时,ETag在Chrome中就不工作了

在“响应头”部分,单击“查看源”,而不是解析版本。第一行可能会读到类似于
HTTP/1.1 200 OK
——如果它说
HTTP/1.0 200 OK
Chrome似乎忽略了任何
ETag
标题,并且不会在下一次加载此资源时使用它

可能还有其他原因(例如,确保您的ETag头值在引号内发送),但在我的例子中,我消除了所有其他变量,这才是最重要的

更新:查看您的屏幕截图,您的情况似乎也是如此(来自Python的HTTP/1.0服务器)

假设您使用的是Django,请在本地设置文件中添加以下hack,否则您必须在您和
/manage.py runserver
守护进程之间添加一个实际的HTTP/1.1代理。此解决方案绕过Django内部使用的关键WSGI类,使其发送更有用的状态行:

# 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"

此外,还要检查浏览器中是否未禁用缓存,这是开发网站时经常做的,这样您就可以始终看到最新内容。

Chrome也没有为我发送“如果不匹配”标题。我没有任何缓存控制头。我关闭了浏览器,再次打开它,它开始按预期发送“如果不匹配”标题。因此,重新启动浏览器是检查是否存在此类问题的又一个选项。

我在Chrome中遇到过类似问题,我使用的是
http://localhost:9000
用于开发(如果没有匹配项,则不使用

通过切换到
http://127.0.0.1:9000
Chrome1自动开始发送请求中的
标题(如果没有匹配的


另外-确保未选中
Devtools>Network>Disable Cache[]


1我在任何地方都找不到这方面的文档-我假设Chrome负责这一逻辑。

你能发布你发送请求的代码吗?您使用的是vanilla js还是一些库?代码是否相关?是用什么做的angularjs@avances123:您是否启用了Chrome中的选项禁用缓存(而DevTools处于打开状态)
?没有,我尝试了stackoverflow中的所有方法…我迁移到了Restangular,它具有内置的etag支持,但什么都没有,chrome不发送任何有条件的请求头…我花了30分钟来研究这个-现在我觉得很愚蠢哇,这也是我的问题!在开发工具打开的情况下,缓存被禁用,因此不会发送“如果不匹配”(Firefox)。关于:config,browser.cache.memory.enable在我的Firefoxman中被禁用。谢谢!我正在使用Django-Dev服务器,我遇到了同样的问题。@natevw,我面临着同样的问题。问题是当我刷新选项卡时,如果在请求头中看不到任何匹配项。但是当我发出另一个ajax请求时,我能够看到它。有什么问题吗?@VibhavSinghRohilla这听起来不像是同一个问题。也许您的浏览器只是试图在刷新时不使用缓存来提供帮助?也许你可以提出你自己的问题并提供更多细节。@natevw-我的问题链接是-
Devtools>Network>Disable Cache
saved my day。谢谢使用最新的Chrome 88.0.4324.104,有时我仍然看到Chrome没有发送“如果没有匹配”