69

我正在构建一个 Web 服务器并尝试进行测试。服务器正在运行localhost:888,当我第一次加载 Web 应用程序时,一切正常。但是如果我尝试重新加载页面,一堆XmlHttpRequest请求会以net::ERR_FAILED. 通过在服务器代码中设置断点,我可以验证请求从未真正进入。

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

这是一个在(无 IIS)之上运行的自定义服务器http.sys,似乎默认情况下会缓存内容,然后在后续运行中无法从中加载,但仅当我的服务器在 localhost 上运行时;在网络上,它工作正常。据我所知,net::ERR_FAILEDChrome 中是一个通用的“出了点问题,我们没有对你有用的信息”消息,所以我有点卡在这里。有谁知道这可能是什么原因造成的?

4

10 回答 10

45

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

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

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

于 2020-04-18T19:24:51.687 回答
8

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

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

也可以看看:

于 2020-07-13T12:05:30.700 回答
8

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

于 2020-09-01T11:46:46.843 回答
7

只有一种方法可以查明这些类型的错误

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

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

一旦您从上面的 chrome://network-errors/ 获得错误代码,这也可能是有用的参考

于 2020-12-21T16:10:23.130 回答
4

一个可能的原因是您写错了 AppCache Manifest。例如:在您的 /a/b/cache.html 文件中,您引用了 cache.appcache Manifest 文件,但在 cache.appcache 文件中,您声明如下:

缓存:

/cache.html

这是错误的。

你应该写:

缓存:

/a/b/cache.html

希望这可以帮到你。

于 2015-02-27T06:49:35.897 回答
3

在 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,
      })
    })
于 2021-03-20T10:20:10.927 回答
2

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

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

于 2019-05-02T06:48:23.887 回答
2

在我的情况下,安装 SSL 证书解决了这个问题。

于 2020-11-15T19:10:14.760 回答
1

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

于 2020-10-07T08:40:04.357 回答
0

如果使用节点,请确保在路由之前添加您的 CORS 标头。IE

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

于 2021-01-31T02:16:46.613 回答