我正在构建一个Web服务器并尝试测试。服务器正在localhost:888
上运行,第一次加载Web应用程序时,一切正常。但是,如果我尝试重新加载页面,那么XmlHttpRequest
个请求会因net::ERR_FAILED
而失败。通过在服务器代码中添加断点,我可以验证请求是否实际上没有进入。
这不是连接失败,因为连接第一次成功。它成功一次然后失败的事实意味着它可能与缓存相关,但服务器代码中没有设置cache-control
标头的内容。所以我通过将服务器放在实际的Web服务器上来测试它。第一次,一切都要花时间加载;第二次,它立即加载,所以这绝对是与缓存相关的
这是一个在http.sys
(没有IIS)之上运行的自定义服务器,并且看起来默认情况下缓存了一些内容,然后在后续运行时无法从中加载,但仅在我的服务器运行时在localhost;在网上,它工作正常。就我所知,net::ERR_FAILED
是一个通用的“出了问题,我们在Chrome上没有任何有用的信息”消息,所以我有点卡在这里。有谁知道这可能导致什么?
答案 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,然后再次检查。