在Chrome开发人员工具中,资源的状态为已取消是什么意思?


402

是什么导致页面被取消?我有一个Chrome开发者工具的屏幕截图。

取消资源

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


13
您也许可以从内部网络跟踪中获取更多详细信息。我有一个类似的问题,在我的案件中发现被取消是net::ERR_ABORTED在掩盖之下。在这种情况下,此帖子说明“ net :: ERR_ABORTED仅在用户操作导致加载中断时生成。当新导航中断现有导航或用户单击STOP时,可能会发生这种情况。按钮。”
约翰·麦卡锡

谢谢。就我而言,不是用户,因为我是用户。该页面确实有(太多)帧。也许帧src被更改了?我从未在IE中看到过这种情况,这很奇怪。我将研究内部网。
styfle 2012年

@ nondescript1我在重现错误并转储到文件时进行了捕获。现在我有一个18,000行的json文件。我在找什么
styfle 2012年

3
老实说我不知道​​。当我在寻找有关身份的更多信息时,实际上遇到了您的问题,这就是为什么我只添加评论而不是回答;)。我没有理由认为这与缓存有关。我更怀疑页面中有人启动了另一个导航。看到此消息时,我正在尝试使用window.open()启动下载,该下载导致另一个服务器请求被取消。就我而言,Firefox没有这个问题,但是Chrome没有。
约翰·麦卡锡

1
不用说,状态栏中“(已取消)”的一个可能原因(尽管绝对不是唯一可能的原因)是给定的URL返回了404或其他错误。强制刷新另一个标签中的URL几次,以确保其加载一致。
rakslice

Answers:


592

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

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

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

在我们的案例中,我们最终将其追溯到一个框架,试图将HTML附加到另一框架,有时这是在目标框架加载之前发生的。触摸iframe的内容后,它就无法再将资源加载到其中(它将如何知道将其放置在哪里?),因此它将取消请求。


2
非常翔实,谢谢。我很难重现此错误,因为一旦将内容缓存起来,就不会发生。如果在我的JavaScript中设置断点,则不会发生。您的第一个要点可能不是问题,因为我看不到元素被删除。我实际上知道这不是要点3。“一旦触摸iframe的内容,它将无法再将资源加载到其中”是什么意思?你能给个例子吗?
styfle 2012年

1
有趣。因此,我需要找到document.write该框架的所有,并确保它们仅在框架加载时才写入。由于您回答了该状态的含义,因此我将其标记为正确的答案。
styfle 2012年

3
@styfle是的,但是也可以是document.write以外的东西。任何尝试写入框架的内容(例如appendChild或类似内容)都可能导致这种情况。您可能要在每个写入true变量的框架中创建一个onLoad处理程序,然后其他框架在触摸任何内容之前先查找该变量。
2012年

14
我对此也遇到了可怕的问题。我发现,如果AJAX响应的状态码为301/302并且重定向URL在另一个域上,则确实会持续触发此事件。对我来说,这是问题的一致再现。
eb80 2013年

1
对我来说,它是将iframe附加到主体,然后立即从主体中移除。我换行了,问题不在那里。因此,请设置一些超时时间(15毫秒)并加以克服。@whamma确实激发了您解决问题的方式。感谢您提供如此详尽的详细信息。:-)
穆罕默德·罗勒

53

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

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

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

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

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

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

3
这救了我,这是我遇到的问题:我ng-click在按钮上使用了angular的按钮,type="submit"然后在被调用的函数中进行了一些联网。Chrome浏览器不断取消该请求...
罗宾(Robin)

1
不幸的是,它对我不起作用。还有其他提示吗?
Krzysztof Madej

Vaov也救了我!对于有角度的ng-click事件,我嵌套了$ http请求,第二个请求被取消了。设置了prevent default行后,再次开始工作,谢谢。
Bahadir Tasdemir '16

谢谢你 我知道这不是CORS或DOM问题。也许@whamma可以更新其答案以将其包括为完整性的可能原因:)
glidester,2017年

赞美主!先生,您真是个天才!!我已经得救了!
Dilnoor Singh,

25

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

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

这个答案可能永远不会被任何人阅读,但是我想出了为什么不写它:)


这是我的根本原因-一个按钮两次触发POST。我不想移动的按钮了,因为CSS的东西表单元素所以这是解决办法:stackoverflow.com/questions/932653/...
尼古拉Koudelia

同样的问题。为了澄清,我在表单中包含一个带有提交类型的按钮,但是有一个onclick正在执行jquery表单提交,ajax提交。它在FF中工作,但在chome和IE中失败了,直到我找到它之前,我都疯了。
克里斯·汤普森(ChrisThompson),

这解决了在Vue.js应用程序中发生的一个问题,该事件将@click事件绑定到<button>表单包装器中的元素。除非您正在使用Vue的@submit.prevent事件修饰符,否则请避免这样做。
Paul Wenzel

对我来说就是这种情况。通过type="button"在我的按钮标签中添加,就不会提交表单,从而避免了取消事件。
布兰登·梅登瓦尔德

12

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

但是“很多”人拥有AdBlock。

要排除扩展,请在隐身模式下打开一个新标签,以确保要测试的扩展范围的“隐身模式允许关闭”。


确实发生了什么。打开noscript插件,突然iFrame不再加载。
Margus Pala

对我来说,这是Hola插件。禁用后,请求将不再被取消。
列宁·拉杰·拉贾塞卡兰(Linin Raj Rajasekaran),

1
就我而言,它是“ JavaScript错误通知程序” chrome扩展程序
Alex

我尝试调查了一切,但仍然没有使用Angular 8的运气,禁用了所有扩展,并且仍在缓慢的3G网络上,之前的呼叫已取消。:(
–born2net

10

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

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

要解决此问题,您将需要删除“ X-Frame-Options”标题标签。这可能使您容易遭受点击劫持攻击,因此您需要确定风险是什么以及如何减轻风险。


这正是我的问题。针对这个讨论有关于如何解决它很好的答案:stackoverflow.com/questions/6666423/...
ToniTornado

8

以我为例,我发现这是jquery全局超时设置,一个jquery插件将全局超时设置为500ms,因此当请求超过500ms时,chrome将取消该请求。


遇到同样的问题。在我的情况下,这是使用VirtualBox来宾服务器的本地WordPress / WooCommerce开发,并且某些WooCommerce AJAX请求具有5000ms的预定义AJAX超时。如果有人遇到相同问题,则此超时在includes/class-wc-frontend-scripts.php文件中定义。
伊万·沙茨基

7

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


尽管就其原因而言非常明显,但仍然是一个非常有用的答案。我正在编辑一些旧的coffeescript代码,并完全忘记了单引号不会进行#{}插值,因此生成的URL格式错误。但是Chrome没有告诉我任何有关它的信息。
kumarharsh

4

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

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


您基本上可以将非证书域重定向到证书域吗?从裸到www?还是总是看到取消或证书错误?
Konstantin Vahrushev

3

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

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

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

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

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

在PC,Mac和Android上的Chrome中,重定向已变为已取消的请求。我不知道它是否特定于我的网站设置(SagePay低配置文件)或Chrome中的某些更改。


在使用Datacash托管的支付服务时,我在Chrome 30中看到几乎相同的行为,但是就我而言,从3dsecure站点到Datacash站点的POST被取消了,尽管两者都是https。事实证明这是个谜。
杰森

2

如果我使用指向本地主机的“ 移动仿真”,Chrome版本33.0.1750.154 m始终取消图像加载;特别是启用用户代理欺骗功能(仅针对屏幕设置)。

当我关闭用户代理欺骗时;图片请求未取消,我看到了图片。

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

  • 接受
  • 缓存控制
  • 语用
  • 推荐人
  • 用户代理

在后一种情况下,所有这些加上其他类似:

  • 曲奇饼
  • 连接
  • 主办
  • 接受编码
  • 接受语言

耸耸肩


2

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

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

如您所见,我忘记了“ http://”。添加完之后,它就可以了。


2

就我而言,我有一个点击事件主播,例如

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

在内部点击事件中,我进行了一些网络通话,Chrome取消了该请求。锚点具有hrefwith ""手段,它将重新加载页面,同时发生具有取消的网络调用的click事件。每当我href用空之类的替换

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

问题消失了!


2

这是我刚刚遇到的另一种被chrome取消请求的情况,那里没有任何答案。

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

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

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

Chrome只是默默地取消了该请求,对于像我这样的网络开发新手来说,没有任何线索可以解决该问题。一旦我使用android手机下载并安装了证书,问题就消失了。


2

如果您使用了一些基于可观察的HTTP请求(例如Angular(2+)内置的HTTP请求),则可以取消取消可观察的HTTP请求(使用RxJS 6 switchMap运算符组合流时很常见) 。在大多数情况下mergeMap,如果您想完成请求,则只需使用operator 就足够了。


1

我有两个完全相同的东西,两个CSS文件存储在我的主要css文件夹之外的另一个文件夹中。我正在使用Expression Engine,发现问题出在htaccess文件中的规则中。我只是将文件夹添加到我的条件之一中,并对其进行了修复。这是一个例子:

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

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


1

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


1

我们有这样一个问题<button>,即表单中有标签,该标签应该从js发送ajax请求。但是,由于浏览器的缘故,该请求被取消,该请求会在每次点击后自动发送表格button在表单内的表单。

因此,如果您确实要使用button 而不是常规页面,div或者span要在页面上发送表单抛出js,则应使用以下方法设置侦听器:preventDefault功能。

例如

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

    e.preventDefault();

    //do ajax
    $.ajax({

     ...
    });

})


0

就我而言,显示电子邮件客户端窗口的代码导致Chrome停止加载图像:

document.location.href = mailToLink;

将其移动到$(window).load(function(){...})而不是$(function(){...})帮助。


0

当我遗漏return false时,这可以帮助我遇到被取消状态的任何人;在表格中提交。这导致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
});

希望能对某人有所帮助。


0

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

再次,这是专门为回送api。而且由于这是最重要的答案,也是Google的最重要答案,所以我想我将这些答案混在一起。


0

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

  • 创建一个iframe
  • iframe onload提交表格

  • 2秒后,移除iframe

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


0

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


0

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


0

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


0

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



0

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

由于我的JS代码中的某些问题,window.location多次更新,导致取消了先前的请求。尽管以前存在问题,但chrome在更新到版本76后开始取消请求。


0

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

await dataToUpdate =等待dataPrep(); http.put(apiUrl,dataToUpdate);

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.