如果发起者iframe在完成之前被销毁,那么HTTP请求是否总是被所有浏览器取消?

时间:2017-01-05 08:13:40

标签: google-chrome browser http-post request-cancelling

在Chrome上我注意到如果我在提交内部表单的请求完成之前销毁iframe,那么请求就会被取消。这似乎不会发生在Firefox和IE中。

这是规范推荐的内容吗?其他浏览器计划将来做同样的事吗?

1 个答案:

答案 0 :(得分:0)

"其他浏览器是否计划将来也这样做?"

毫无头绪,但我在下面展示的规范链最终依赖于fetch specification,这部分是由服务工作者激发的,MS Edge为supported by Chrome and Firefox"In Development"和WebKit "Under Consideration"(截至2017-01-17)。

WHATWG's iframe section州:

  

当从文档中删除iframe元素时,用户代理必须丢弃元素的嵌套浏览上下文(如果它不为null),然后将元素的嵌套浏览上下文设置为null。 / p>      

注意这种情况发生时没有任何卸载事件触发(嵌套浏览上下文及其文档被丢弃,而不是卸载)。

WHATWG的浏览器记录了discard a Document section个州:

  

当浏览上下文要放弃文档时,用户代理必须执行以下步骤:

     

将文档的可抢救状态设置为false。

     

为本规范和其他适用规范定义的Document运行任何卸载文档清理步骤。

     

中止文档。 [强调添加]

     

在任何任务源中删除与文档关联的任何任务,而不运行这些任务。

     

放弃文档的所有子浏览上下文。

     

将文档浏览上下文中的强引用丢失到文档。

关于aborting a document的相同文件部分说明:

  

如果文档已中止,则用户代理必须执行以下步骤:

     

中止每个子浏览上下文的活动文档。如果这导致任何那些将其可抢救状态设置为false的Document对象,则也将此Document的可抢救状态设置为false。

     

在本文档的上下文中取消任何获取算法 [强调添加] 的实例,丢弃为其排队的任何任务,并丢弃从该文档接收的任何其他数据他们的网络。如果这导致取消算法的任何实例被取消或任何排队的任务或任何网络数据被丢弃,则将Document的可抢救状态设置为false。

     

如果Document有一个活动的解析器,则中止该解析器并将Document的可抢救状态设置为false。

鉴于&#34; fetch算法&#34;是浏览器发出任何HTTP请求的新标准化方式,我解释了已移除iframe所有未完成请求的取消与上述部分一致。< / p>

比照。 fetch spec如果你还没有足够的话。 :)

再次参考

The iframe element

Discard a Document

Abort a Document

Fetch spec