是什么原因导致Chrome在缓存内容上针对localhost上的服务器提供net :: ERR_FAILED?

时间:2014-03-26 15:11:12

标签: html google-chrome caching http.sys

我正在构建一个Web服务器并尝试测试。服务器正在localhost:888上运行,第一次加载Web应用程序时,一切正常。但是,如果我尝试重新加载页面,那么XmlHttpRequest个请求会因net::ERR_FAILED而失败。通过在服务器代码中添加断点,我可以验证请求是否实际上没有进入。

这不是连接失败,因为连接第一次成功。它成功一次然后失败的事实意味着它可能与缓存相关,但服务器代码中没有设置cache-control标头的内容。所以我通过将服务器放在实际的Web服务器上来测试它。第一次,一切都要花时间加载;第二次,它立即加载,所以这绝对是与缓存相关的

这是一个在http.sys(没有IIS)之上运行的自定义服务器,并且看起来默认情况下缓存了一些内容,然后在后续运行时无法从中加载,但仅在我的服务器运行时在localhost;在网上,它工作正常。就我所知,net::ERR_FAILED是一个通用的“出了问题,我们在Chrome上没有任何有用的信息”消息,所以我有点卡在这里。有谁知道这可能导致什么?

12 个答案:

答案 0 :(得分:33)

我遇到了类似的问题。我已在devtools的“网络”选项卡中将请求复制为获取。

然后我已经在浏览器开发控制台中运行了它。在那里,我可以阅读有关CORS的错误的说明。在api服务器上设置cors之后,它就可以工作了。

您必须将fetch命令粘贴到起源相同的开发者控制台中,并且不要偶然,例如从stackoverflow打开它。

答案 1 :(得分:8)

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

遗憾的是,您无法在此处使用域列表,因为没有浏览器支持此官方标准。但是,像Spring这样的几个框架允许您设置白名单配置,然后根据需要进行匹配。

另请参阅:

答案 2 :(得分:7)

在这组答案中,一个非常重要且不受欢迎的评论是“看看您的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

答案 3 :(得分:3)

最可能的原因是你写的AppCache Manifest错了。 例如:在你/a/b/cache.html文件中你引用了cache.appcache Manifest文件,但在cache.appcache文件中你宣布如下:

CACHE:

/cache.html

这是错误的。

你应该写:

CACHE:

/a/b/cache.html

希望这可以帮到你。

答案 4 :(得分:2)

在 package.json 的最后一行添加 "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,
      })
    })

答案 5 :(得分:1)

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

希望这对其他在这里结束的人很有帮助。

答案 6 :(得分:0)

我遇到了类似的问题。

我的服务器位于K8S中。当客户端使用入口路由为问题API提供服务时(如果有大量请求)。客户端将收到相同的net :: ERR_FAILED错误。使用外部负载平衡时没有问题。

然后,我使用JMeter测试了吞吐量的入口路由,事实证明它是可靠的。我正在使用禁用缓存模式进行测试。

答案 7 :(得分:0)

另一个潜在原因是服务工作者正在处理该请求,这会引起某种麻烦。在这种情况下,值得检查开发工具中的Service Worker控制台,以查看是否存在错误消息。

答案 8 :(得分:0)

就我而言,安装SSL证书解决了该问题。

答案 9 :(得分:0)

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

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

我们最近发现由于客户端网络上的代理身份验证问题,导致套接字关闭的 ERR_FAILED。

一旦你得到了上面的错误代码,这也可以是有用的参考 铬://网络错误/

答案 10 :(得分:0)

如果使用节点,请确保在路由之前添加 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 放在后面。

答案 11 :(得分:-1)

关闭Skype,然后再次检查。