我正在构建一个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.