Chrome开发者工具中的资源平均值=取消了什么状态?

时间:2012-08-17 16:18:09

标签: debugging http google-chrome developer-tools web-developer-toolbar

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

Canceled Resource

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

34 个答案:

答案 0 :(得分:499)

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

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

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

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

答案 1 :(得分:40)

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

<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>

答案 2 :(得分:10)

您可能想要检查&#34; X-Frame-Options&#34;标题标记。如果设置为SAMEORIGIN或DENY,那么Chrome浏览器(和其他浏览器)将根据spec取消iFrame插入。

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

要解决此问题,您需要删除&#34; X-Frame-Options&#34;标题标记。这可能会让您向clickjacking attacks开放,因此您需要确定风险是什么以及如何减轻风险。

答案 3 :(得分:10)

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

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

要排除扩展程序,请在隐身模式下打开一个新标签页,确保您要测试的扩展程序“允许隐身”。

答案 4 :(得分:10)

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

我有一个类似的问题,我的onclick = {}按钮被包装在表单元素中。单击按钮时,表单也会被提交,并且全部搞砸了......

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

答案 5 :(得分:7)

在我的情况下,我发现它是jquery全局超时设置,jquery插件设置全局超时为500ms,因此当请求超过500ms时,chrome将取消请求。

答案 6 :(得分:6)

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

答案 7 :(得分: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 Low Profile)或Chrome中是否有变化。

答案 8 :(得分:3)

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

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

答案 9 :(得分:2)

如果我使用我的localhost指向的Mobile Emulation,则Chrome版本33.0.1750.154 m会一直取消图片加载。特别是用户代理欺骗 on (仅针对屏幕设置)。

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

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

  • 接受
  • 缓存控制
  • 附注
  • Referer的
  • 的User-Agent

在后一种情况下,所有这些以及其他如:

  • 曲奇
  • 连接
  • 主机
  • 接受编码
  • 接受语言

耸肩

答案 10 :(得分:1)

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

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

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

答案 11 :(得分:1)

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

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

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

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

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

答案 12 :(得分:1)

我们遇到了这样的问题:标签<button>的形式应该是从js发送ajax请求。但是,由于浏览器的缘故,此请求已被取消,该请求通过单击表单内的button自动发送表单。

因此,如果您确实要在页面上使用button而不是常规的divspan,并且要发送表单抛出js,则应使用{{ 1}}功能。

例如

preventDefault

答案 13 :(得分:1)

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

答案 14 :(得分:1)

对于我的情况,我有一个点击事件的锚点,如

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

内部点击事件我有一些网络电话,Chrome取消了请求。锚具有href ""表示,它重新加载页面,同时它具有取消的网络调用的点击事件。每当我用

之类的空格替换href
<a href="javascript:void(0)" onclick="somemethod($index, hour, $event)">

问题消失了!

答案 15 :(得分:1)

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

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

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

严格的角度来看:

它发生在您无法在代码级别正确中断时。

假设,request1出来了,它的响应也来了, 之后,嵌套的request2也出去了,响应也来了,直接跳出循环,没有正确销毁request1的订阅,

那个时候,它发生了

答案 18 :(得分:0)

我的内容安全策略标头!您可以通过检查 Chrome Dev Tools Console 快速排除这种可能性,如果是 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>

答案 19 :(得分:0)

在我看来,问题的原因又是另一原因。

我的应用程序位于代理后面,并且Chrome请求是通过If-Modified-Since HTTP header发送的。存在此标头时,执行的行为是:

仅当在给定日期之后对资源进行最后修改时,服务器才会以200状态发送回请求的资源。如果此后未修改请求,则响应将为304,没有任何正文;

代理未满足此期望,以304状态代码响应,但响应为非空主体,因此导致请求被取消。

修复代理行为后,请求的工作就像灵符一样。

答案 20 :(得分:0)

我在a标记内有一个div标记。 div的{​​{1}}和onclick="location='http://mydestination.org/'"标签在a中具有相同的URL。这导致目标页面被加载两次,而第一次加载被Chrome取消。

答案 21 :(得分:0)

如果您使用axios,它将为您提供帮助

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

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

答案 22 :(得分:0)

如果您使用了一些基于可观察的HTTP请求(例如Angular(2+)中的内置HTTP请求),则可以取消观察到的HTTP请求(在使用RxJS 6 {{1 }}运算符组合流)。

答案 23 :(得分:0)

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

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

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

答案 24 :(得分:0)

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

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

答案 25 :(得分:0)

一个原因可能是在代码中的某个地方调用了XMLHttpRequest.abort(),在这种情况下,该请求在Chrome开发者工具的“网络”标签中的状态为cancelled

答案 26 :(得分:0)

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

答案 27 :(得分:0)

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

答案 28 :(得分:0)

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

document.location.href = mailToLink;

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

答案 29 :(得分:0)

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

答案 30 :(得分:0)

在我遗漏归来假的时候,这可以帮助我找到被取消状态的任何人;在表单提交。这导致ajax发送紧跟在提交操作之后,该操作覆盖了当前页面。代码如下所示,最后重要的返回为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
});

希望能有所帮助。

答案 31 :(得分:0)

对于我'取消'状态是因为该文件不存在。奇怪为什么chrome没有显示404

答案 32 :(得分:0)

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

同样,这是专门针对loopback api的。因为这是一个顶级的答案,谷歌的顶部我想我会把这个放在答案的混合。

答案 33 :(得分:0)

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

  • 创建iframe
  • iframe的onload提交表单

  • 2秒后,删除iframe

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