什么可以导致Chrome在缓存内容上对本地主机上的服务器给出net::ERR_FAILED



我正在构建一个web服务器,并试图测试的东西。服务器在localhost:888上运行,我第一次加载web应用程序时,一切正常。但是,如果我尝试重新加载页面,一堆XmlHttpRequest请求失败与net::ERR_FAILED。通过在服务器代码中设置断点,我可以验证请求实际上从未进入。

这不是连接失败,因为第一次连接成功。它成功了一次,然后失败了,这意味着它可能与缓存有关,但是服务器代码中没有设置cache-control标头。因此,我通过将服务器放在实际的web服务器上进行测试。第一次,所有内容都需要慢慢加载;第二次,它立即加载,所以这肯定是与缓存相关的

这是一个运行在http.sys(没有IIS)之上的自定义服务器,似乎默认情况下,事情正在缓存,然后在后续运行中无法从它加载,但只有当我的服务器在本地主机上运行时;在网络上,它工作得很好。据我所知,net::ERR_FAILED是一个通用的"出了问题,我们没有对你有用的信息"在Chrome消息,所以我有点卡在这里。有人知道是什么引起的吗?

我也遇到过类似的问题。我在devtools的Network选项卡中复制了request作为fetch。

然后我在浏览器开发控制台运行它。在那里我可以读到关于CORS错误的描述。在api服务器上设置cors后,它工作了。

你必须将fetch命令粘贴到相同来源的开发控制台,而不是意外地从stackoverflow打开它。

只有一种方法可以了解这些类型的错误

在chrome中使用chrome://net-export/在一个选项卡中,然后在另一个选项卡中记录会话并使用https://netlog-viewer.appspot.com/#import进行调试,该选项卡允许您以更可读的格式查看输出。

我们最近发现了一个ERR_FAILED到套接字正在关闭,因为客户端网络上的代理身份验证问题。

当你从上面得到错误代码时,

也是一个有用的参考chrome://network-errors/

另一个原因是,当您使用withCredentials: true(发送跨原产地cookie)进行XHR调用时,您不允许设置Access-Control-Allow-Origin: *,但必须提供特定的域!

遗憾的是,您不能在这里使用域名列表,因为没有浏览器支持这个官方标准。但是一些框架,比如Spring,允许你设置一个白名单配置,然后根据请求进行匹配。

参见:

  • CORS:当凭据标志为true时,不能在Access-Control-Allow-Origin中使用通配符
  • 响应头不能是通配符'*'当请求's凭据模式为'include'
  • https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials

在这组回答中有一条非常重要但不受欢迎的评论是,"看看你的CORS标题。"我有一个类似的问题,它给了我这个错误与一些刺激。我的Apache日志中没有数据,但我注意到我们调用了一个辅助URL,并且没有得到该辅助URL的响应。

Chrome最初并未将其称为CORS问题,但缺乏响应导致我深入研究我们的Apache设置并更改允许的CORS源头。

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
        Header set Access-Control-Allow-Origin "https://our-site.com"
        Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
        Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</Directory>

这个答案可能不适用于你的情况,但它适用于我的net::ERR_FAILED

一个可能的原因是你写你的AppCache Manifest错误。例如:在you/a/b/cache.html文件中引用缓存。appcache Manifest文件,但在缓存中。Appcache文件:

缓存:

/cache.html

是错误的

你应该写:

缓存:

/a/b/cache.html

希望这能帮助你。

另一个潜在的原因是service worker正在处理的请求遇到了某种麻烦。在这种情况下,有必要检查开发工具中的service worker控制台,看看那里是否有错误消息。

在我的案例中,安装SSL证书解决了这个问题。

在package的最后一行添加"proxy"; "http://localhost:port_number/"mode: 'same-origin'在客户端请求体中。例如,

fetch('login', {
      method: 'post',
      mode: 'same-origin',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        username: username,
        password: password,
      })
    })

我在请求我的一个虚拟主机时在我的本地主机上遇到了这个错误(在星期一早上)。结果我仍然有一个未完成的调试操作在另一个虚拟主机上运行(我周五下午的未完成的业务:)),它阻止了Apache为其他请求提供文件。这导致我的浏览器控制台出现net::ERR_FAILED错误。

希望这可能对其他人在这里结束有帮助。

如果使用node,请确保在路由之前添加CORS标头。即

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});
app.get('/route.htm', function (req, res) {
    res.sendFile( __dirname + "/" + "route.htm" );
});

而不是把app.use放在。

在Mac OS/Chrome上发生过这种情况,但在Safari上没有。而且似乎是最近才出现的(也就是说,可能不是从代码部署中出现的……或许是Chrome浏览器的更新?)我无法用Chrome在其他电脑上复制它。重新启动Chrome和电脑没有帮助。

我没有注意到任何奇怪的扩展,他们说他们没有安装任何新的。

张贴在万一有一个新出现的问题在Chrome.

相关内容

  • 没有找到相关文章

最新更新