Javascript的Aborable Fetch会关闭HTTP连接吗?



大约在2017年,已经可以中止获取并立即在前端javascript中继续前进。但是,我很难找到关于这对HTTP连接有什么作用的任何信息。它是过早地关闭请求,还是浏览器保持请求打开,并在响应到达时丢弃它?

我有一个用例,用户正在从web应用程序前端进行(潜在的)昂贵的数据库调用。有时,他们会注意到一个请求花费的时间太长,然后手动取消它。我希望能够接受这个信号并取消我昂贵的数据库查询,因为它们不再对结果感兴趣。

是否有任何方法,我的REST服务器可以告诉提取已经中止?(我的服务器是Java Jersey/Grizzly.)

一般情况下:

https://fetch.spec.whatwg.org/#http-network-fetch step17.2.3/4

  • 如果流产,然后:

    1. 如果fetchParams被终止,则:

      1. 设置响应的终止标志。

      2. 如果流是可读的,那么错误流的结果为反序列化一个给定fetchParams的控制器的序列化中止原因序列化的中止原因和实现定义的领域。

    2. 否则,如果流是可读的,则使用TypeError错误流。

    3. 如果连接使用HTTP/2,则发送RstrongTREAM帧。

    4. 否则,用户代理应该关闭连接,除非它需要这样做对性能不利。

      例如,用户代理可以保持连接打开,如果它知道在可重用对象上只剩下几个字节的传输空间连接。在这种情况下,关闭连接可能会更糟糕再次执行握手过程以获取下一次数据。

  • 但是,Firefox目前可能无法在某些情况下(https://bugzilla.mozilla.org/show_bug.cgi?id=1568422)。

    最新更新