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

sty*_*fle 370 debugging google-chrome http developer-tools web-developer-toolbar

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

取消资源

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

wha*_*mma 545

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

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

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

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

  • 我也有这个可怕的问题.如果AJAX响应的状态代码为301/302且重定向URL位于另一个域上,我发现有一件事会一直触发.这是对我来说问题的一致再现. (12认同)
  • 刚刚在 React 应用程序中发生了这种情况,其中发出请求的组件被从 DOM 中取出。谢谢您的帮助! (4认同)
  • @styfle是的,但它也可以是document.write以外的东西.任何尝试写入像appendChild或类似的框架的东西都可能导致这种情况.您可能希望在每个帧中创建一个onLoad处理程序,将"true"写入某个变量,然后其他帧在触摸任何内容之前首先查找该变量. (3认同)
  • 这真的很可怕,你必须深入浏览器的源代码才能知道为什么会发生这种情况,特别是因为我几乎每天都在 devtool 中看到这种情况。没有相关文档或类似内容吗? (3认同)
  • 非常翔实,谢谢.我很难再现这个bug,因为一旦事情被缓存,它就不会发生.如果在我的javascript中设置断点,则不会发生.你的第一个要点可能不是问题,因为我没有看到一个元素被删除.我知道这不是一个要点3.你是什么意思"一旦你触摸iframe的内容,它就不能再将资源加载到它中"?你能给我举个例子吗? (2认同)
  • 只是为了补充一点,我发现了另一个我在表单发布后进行 302 重定向的地方,请求在 Chrome 中显示为已取消,但服务器日志显示了 302 响应。这是因为 `Location` 标头的 URL 不正确:`localhost:8080` 而不是 `http://localhost:8080`。希望这可以帮助某人! (2认同)

小智 50

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

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

<button id="call_ajax">call</button> 
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这样就省去了我的问题,在我的情况下,我在一个带有`type ="submit"`的按钮上使用angular的'ng-click`然后在被调用的函数中做了一些网络.Chrome一直取消该请求... (3认同)

sti*_*nlp 20

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

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

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


Jam*_*urz 11

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

但"很多"人都有AdBlock ....

要排除扩展程序,请在隐身模式中打开一个新标签页,确保您要测试的扩展程序"允许隐身模式已关闭".


Jus*_*oud 10

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

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

要解决此问题,您需要删除"X-Frame-Options"标头标记.这可能使您对点击攻击持开放态度,因此您需要确定风险是什么以及如何减轻风险.


小智 7

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


Jar*_*yth 6

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


Phi*_*l M 6

当我在 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
Run Code Online (Sandbox Code Playgroud)

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


Wil*_*ton 5

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

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


zem*_*mil 5

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

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

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