460

什么会导致页面被取消?我有 Chrome 开发者工具的截图。

取消的资源

这种情况经常发生,但不是每次都发生。似乎一旦缓存了其他一些资源,页面刷新就会加载 LeftPane.aspx。真正奇怪的是,这只发生在 Google Chrome 中,而不是 Internet Explorer 8。任何想法为什么 Chrome 会取消请求?

4

34 回答 34

683

我们解决了一个类似的问题,Chrome 取消了在框架或 iframe 中加载内容的请求,但只是间歇性的,而且它似乎取决于计算机和/或互联网连接的速度。

这些信息已经过时了几个月,但我从头开始构建 Chromium,挖掘源代码以找到所有可以取消请求的地方,并在所有这些地方设置断点以进行调试。从内存中,Chrome 会取消请求的唯一地方:

  • 导致发出请求的 DOM 元素被删除(即正在加载 IMG,但在加载发生之前,您删除了 IMG 节点)
  • 你做了一些不必要的加载数据的事情。(即您开始加载 iframe,然后更改 src 或覆盖内容)
  • 有很多请求发往同一台服务器,早期请求的网络问题表明后续请求无法正常工作(DNS 查找错误,早期(相同)请求导致例如 HTTP 400 错误代码等)

在我们的例子中,我们最终将其追溯到一个试图将 HTML 附加到另一个帧的帧,这有时甚至发生在目标帧加载之前。一旦你触摸了 iframe 的内容,它就不能再将资源加载到其中(它怎么知道把它放在哪里?)所以它取消了请求。

于 2012-11-19T17:34:50.890 回答
67

status=canceled 也可能发生在 JavaScript 事件的 ajax 请求上:

<script>
  $("#call_ajax").on("click", function(event){
     $.ajax({
        ...    
     });
  });
</script>

<button id="call_ajax">call</button> 

该事件成功发送请求,但随后被取消(但由服务器处理)。原因是,元素在点击事件上提交表单,无论您是否在同一个点击事件上发出任何 ajax 请求。

为了防止请求被取消,event.preventDefault();必须调用 JavaScript:

<script>
  $("#call_ajax").on("click", function(event){
     event.preventDefault();
     $.ajax({
        ...    
     });
  });
</script>
于 2014-06-05T13:55:42.277 回答
39

注意:确保您没有任何包装表单元素

我有一个类似的问题,我的带有 onclick={} 的按钮被包装在一个表单元素中。单击按钮时,表单也被提交,这一切都搞砸了......

于 2016-09-22T13:00:15.933 回答
15

另一件需要注意的事情可能是 AdBlock 扩展,或一般的扩展。

但是“很多”人都有 AdBlock....

要排除扩展程序,请在隐身模式下打开一个新选项卡,确保您要测试的扩展名的“允许隐身模式已关闭”。

于 2013-10-16T10:53:38.390 回答
14

就我而言,我发现是jquery全局超时设置,一个jquery插件设置全局超时为500ms,这样当请求超过500ms时,chrome就会取消请求。

于 2013-07-04T04:32:22.637 回答
12

您可能需要检查“X-Frame-Options”标头标签。如果将其设置为 SAMEORIGIN 或 DENY,则 Chrome(和其他浏览器)将根据规范取消 iFrame 插入。

另请注意,某些浏览器支持 ALLOW-FROM 设置,但 Chrome 不支持。

要解决此问题,您需要删除“X-Frame-Options”标头标签。这可能会让您对点击劫持攻击持开放态度,因此您需要确定风险是什么以及如何减轻风险。

于 2013-06-12T21:19:12.370 回答
9

这是发生在我身上的事情:服务器为 302 重定向返回了格式错误的“位置”标头。当然,Chrome 没有告诉我这一点。我用firefox打开页面,马上就发现了问题。很高兴拥有多种工具:)

于 2013-06-25T20:01:57.713 回答
6

我们遇到(canceled)状态的另一个地方是特定的 TLS 证书配置错误。如果诸如此类的站点https://www.example.com配置错误,以至于证书不包含 ,www.但对 有效https://example.com,则 chrome 将取消此请求并自动重定向到后一个站点。Firefox并非如此

当前有效示例:https ://www.pthree.org/

于 2017-06-20T18:39:12.980 回答
5

在 iframe 中不同域上的安全和非安全页面之间重定向时,我发生了取消的请求。重定向的请求在开发工具中显示为“已取消”请求。

我有一个带有 iframe 的页面,其中包含由我的支付网关托管的表单。提交 iframe 中的表单后,支付网关将重定向回我服务器上的 URL。重定向最近停止工作并最终成为“已取消”的请求。

似乎 Chrome(我使用的是 Windows 7 Chrome 30.0.1599.101)不再允许 iframe 中的重定向转到单独域上的非安全页面。为了解决这个问题,我只是确保 iframe 中的所有重定向请求始终发送到安全 URL。

当我创建一个只有 iframe 的更简单的测试页面时,控制台中有一个警告(我之前错过了或者可能没有出现):

[Blocked] The page at https://mydomain.com/Payment/EnterDetails ran insecure content from http://mydomain.com/Payment/Success

在 PC、Mac 和 Android 上的 Chrome 中,重定向变成了取消的请求。我不知道它是特定于我的网站设置(SagePay Low Profile)还是 Chrome 中的某些内容发生了变化。

于 2013-10-21T13:12:12.877 回答
4

如果我使用指向本地主机的移动仿真,Chrome 版本 33.0.1750.154 m 会始终取消图像加载;特别是使用用户代理欺骗与仅屏幕设置相比)。

当我关闭用户代理欺骗时;图像请求没有被取消,我看到了图像。

我还是不明白为什么;在前一种情况下,请求被取消的请求标头(注意:显示临时标头)只有

  • 接受
  • 缓存控制
  • 编译指示
  • 推荐人
  • 用户代理

在后一种情况下,所有这些加上其他人喜欢:

  • 曲奇饼
  • 联系
  • 主持人
  • 接受编码
  • 接受语言

耸耸肩

于 2014-03-26T21:30:16.850 回答
4

当我通过 JavaScript 重定向时,我在 Chrome 中收到此错误:

<script>
    window.location.href = "devhost:88/somepage";
</script>

如您所见,我忘记了 'http://'。我添加后,它起作用了。

于 2017-04-08T21:40:02.997 回答
3

就我而言,我有一个带有点击事件的锚点,例如

<a href="" onclick="somemethod($index, hour, $event)">

在点击事件中,我有一些网络调用,Chrome 取消了请求。锚点有href手段"",它重新加载页面,同时它有点击事件,网络调用被取消。每当我href用 void替换

<a href="javascript:void(0)" onclick="somemethod($index, hour, $event)">

问题消失了!

于 2017-04-24T12:16:46.680 回答
3

如果你使用 axios 它可以帮助你

// change timeout delay: instance.defaults.timeout = 2500;

https://github.com/axios/axios#config-order-of-precedence

于 2019-12-16T10:41:13.717 回答
3

这是我刚刚遇到的另一种请求被chrome取消的情况,上面的任何答案都没有涵盖。

简而言之
,自签名证书在我的 Android 手机上不受信任。

详细信息
我们处于开发/调试阶段。该 url 指向一个自签名主机。代码如下:

location.href = 'https://some.host.com/some/path'

Chrome 只是默默地取消了请求,没有给像我这样的 web 开发新手解决问题留下任何线索。一旦我使用安卓手机下载并安装了证书,问题就消失了。

于 2018-12-26T06:17:54.333 回答
2

当我在样式表中嵌入网络字体时,我嵌入了所有类型的字体以及woffwoff2ttf 。最近我注意到 Chrome在woff2存在时取消了对ttfwoff的请求。我现在使用 Chrome 版本 66.0.3359.181,但我不确定 Chrome 何时开始取消额外的字体类型。

于 2018-05-31T11:02:04.760 回答
2

我们在表单中有标签时遇到了这个问题<button>,它应该从 js 发送 ajax 请求。但是这个请求被取消了,因为浏览器会在表单内的任何点击时自动发送button表单。

因此,如果您真的想使用button 而不是常规divspan在页面上使用,并且想要发送表单 throw js - 您应该设置一个带有preventDefault函数的侦听器。

例如

$('button').on('click', function(e){

    e.preventDefault();

    //do ajax
    $.ajax({

     ...
    });

})
于 2018-12-06T10:05:25.323 回答
2

我遇到了同样的问题,在我们的代码深处,我们有这个伪代码:

  • 创建一个 iframe
  • 加载 iframe 提交表单

  • 2 秒后,移除 iframe

因此,当服务器响应时间超过 2 秒时,服务器正在写入响应的 iframe 被删除,但响应仍要写入,但没有 iframe 可写入,因此 chrome 取消了请求,因此为避免这种情况,我确保仅在响应结束后才删除 iframe,或者您可以将目标更改为“_blank”。因此,原因之一是: 当您正在写入内容的资源(在我的情况下为 iframe)在您停止写入之前被删除或删除时,请求将被取消

于 2017-03-28T07:28:40.577 回答
2

如果您使用一些基于 Observable 的 HTTP 请求,例如 Angular (2+) 中内置的那些,那么 HTTP 请求可以在 observable 被取消时被取消(当您使用 RxJS 6switchMap运算符组合流时很常见) . mergeMap在大多数情况下,如果您希望请求完成,则使用运算符就足够了。

于 2019-11-22T23:13:47.697 回答
1

我有两个 CSS 文件完全相同的东西,它们存储在我的主 css 文件夹之外的另一个文件夹中。我正在使用表达式引擎,发现问题出在我的 htaccess 文件中的规则中。我刚刚将该文件夹添加到我的条件之一中并修复了它。这是一个例子:

RewriteCond %{REQUEST_URI} !(images|css|js|new_folder|favicon.ico)

因此,检查 htaccess 文件是否有任何潜在冲突可能是值得的

于 2013-04-24T10:59:32.220 回答
1

打电话给我时也发生了同样的事情。带有 $.js 的文件。ajax,并发出ajax请求,我所做的就是正常调用。

于 2013-08-13T18:48:38.310 回答
1

在我的情况下,显示电子邮件客户端窗口的代码导致 Chrome 停止加载图像:

document.location.href = mailToLink;

将其移至 $(window).load(function () {...}) 而不是 $(function () {...}) 会有所帮助。

于 2014-05-19T05:32:13.867 回答
1

这可以帮助我在遗漏返回错误时遇到取消状态的任何人;在表单中提交。这导致 ajax 发送紧跟在提交操作之后,该操作覆盖了当前页面。代码如下所示,最后是重要的 return false。

$('form').submit(function() {

    $.validator.unobtrusive.parse($('form'));
    var data = $('form').serialize();
    data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val();

    if ($('form').valid()) {
        $.ajax({
            url: this.action,
            type: 'POST',
            data: data,
            success: submitSuccess,
            fail: submitFailed
        });
    }
    return false;       //needed to stop default form submit action
});

希望对某人有所帮助。

于 2014-06-09T09:28:18.550 回答
0

就我而言,问题的原因是另一个。

我的应用程序位于代理后面,Chrome 请求使用If-Modified-Since HTTP 标头发送。当此标头存在时,预期的行为是:

服务器将返回请求的资源,状态为 200,仅当它在给定日期之后最后一次修改时。如果此后请求没有被修改,则响应将是没有任何正文的 304;

Proxy 未能满足此预期,响应为 304 状态代码但正文非空,从而导致请求被取消。

修复代理行为请求后,就像一个魅力。

于 2020-07-15T20:40:21.773 回答
0

对我来说,“取消”状态是因为该文件不存在。奇怪为什么 chrome 不显示404

于 2018-02-10T17:56:08.777 回答
0

对我来说,这就像一条错误的道路一样简单。我建议调试的第一步是查看是否可以独立于 ajax 等加载文件。

于 2018-10-03T07:11:40.497 回答
0

我的内容安全策略标头!您可以通过检查 Chrome 开发工具控制台快速排除这种可能性,如果是 CSP 问题,控制台中会显示错误。在 .Net 中,您可以通过在 web.config 文件或代码中添加标头来解决此问题。

拒绝将表单数据发送到“https://www.mysite.mydomain/”,因为它违反了以下内容安全政策指令:“form-action 'self' *.otherdomain www.thirdparty.co.uk”。

这是针对上述错误的 web.config 修复:

<cspConfiguration>
        <directives>
            <directive name="form-action" allowedSources="'self' *.mydomain>
            </directive>
        </directives>
</cspConfiguration>

于 2021-02-05T09:21:35.707 回答
0

对于来自 LoopbackJS 并尝试使用其图表示例中提供的自定义流方法的任何人。我在使用 时遇到此错误PersistedModel,切换到基本Model解决了我的eventsource状态取消问题。

同样,这是专门针对回送 api 的。而且由于这是谷歌的最佳答案和顶级答案,我想我会把它放在答案的组合中。

于 2016-04-05T22:49:13.273 回答
0

请求可能已被跟踪保护插件阻止。

于 2019-02-21T21:33:38.200 回答
0

加载 300 张图像作为背景图像时发生在我身上。我猜一旦第一个超时,它就会取消所有其余的,或者达到最大并发请求。需要执行一次 5 个

于 2019-03-18T20:51:01.617 回答
0

我在a标签内有一个div标签。divhadonclick="location='http://mydestination.org/'"atag 在href. 这导致目标页面被加载两次,第一次加载被 Chrome 取消。

于 2020-05-12T07:05:24.407 回答
0

就我而言,它是在 chrome 76 更新之后开始出现的。

由于我的 JS 代码中的一些问题,window.location 被多次更新,导致取消之前的请求。虽然之前就存在这个问题,但 chrome 在更新到版本 76 后开始取消请求。

于 2019-08-06T18:43:43.367 回答
0

原因之一可能是在代码中的某处调用了XMLHttpRequest.abort(),在这种情况下,请求将具有cancelledChrome 开发人员工具网络选项卡中的状态。

于 2019-06-26T05:47:11.860 回答
0

从严格的角度来看 Angular :

当您无法在代码级别正确中断时,就会发生这种情况。

假设request1出去了,它的response也来了,然后嵌套的request2也出去了,它的response也来了,直接跳出循环,没有正确破坏request1的订阅,

那时,它发生了

于 2021-03-25T08:48:21.847 回答
0

更新记录时我遇到了同样的问题。在 save() 内部,我正在准备从表单中获取的原始数据以匹配数据库格式(对枚举值进行大量映射等),这会间歇性地取消 put 请求。我通过从 save() 中取出数据准备并从中创建一个专用的 dataPrep() 方法来解决它。我把这个 dataPrep 变成了 async 并等待所有的内存密集型数据转换。然后我将准备好的数据返回给我可以在 http put 客户端中使用的 save() 方法。在调用 put 方法之前,我确保在 dataPrep() 上等待:

等待数据更新 = 等待数据准备();http.put(apiUrl, dataToUpdate);

这解决了请求的间歇性取消。

于 2019-10-24T11:01:04.433 回答