什么会导致页面被取消?我有Chrome开发者工具的屏幕截图。
这种情况经常发生,但不是每次都发生。似乎一旦其他资源被缓存,页面刷新将加载LeftPane.aspx。真正奇怪的是,这只发生在谷歌浏览器,而不是Internet Explorer 8.任何想法为什么Chrome会取消请求?
答案 0 :(得分:499)
我们遇到了类似的问题,即Chrome取消了在框架或iframe中加载内容的请求,但只是间歇性的,而且似乎依赖于计算机和/或互联网连接的速度。
这个信息已经过时了几个月,但是我从头开始构建Chromium,在源代码中挖掘查找请求可能被取消的所有地方,并在所有这些地方打上断点进行调试。从内存中,Chrome将取消请求的唯一地方:
在我们的例子中,我们最终将其追溯到一帧试图将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 (仅针对屏幕设置)。
当我关闭用户代理欺骗时;图像请求没有被取消,我看到图像。
我仍然不明白为什么;在前一种情况下,请求被取消,请求标题(注意:显示临时标题)只有
在后一种情况下,所有这些以及其他如:
耸肩
答案 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
而不是常规的div
或span
,并且要发送表单抛出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;
答案 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)
答案 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的onload提交表单
2秒后,删除iframe
因此,当服务器花了2秒多的时间来响应服务器正在写入响应的iframe时,被删除了,但仍然要写入响应,但是没有iframe要写,因此chrome取消了请求,因此为了避免这种情况,我确保仅在响应结束后删除iframe,或者您可以将目标更改为&#34; _blank&#34;。 因此其中一个原因是: 当您写入内容的资源(我的情况下为iframe)在您停止写入之前被删除或删除时,请求将被取消