大约在2017年,已经可以中止获取并立即在前端javascript中继续前进。但是,我很难找到关于这对HTTP连接有什么作用的任何信息。它是过早地关闭请求,还是浏览器保持请求打开,并在响应到达时丢弃它?
我有一个用例,用户正在从web应用程序前端进行(潜在的)昂贵的数据库调用。有时,他们会注意到一个请求花费的时间太长,然后手动取消它。我希望能够接受这个信号并取消我昂贵的数据库查询,因为它们不再对结果感兴趣。
是否有任何方法,我的REST服务器可以告诉提取已经中止?(我的服务器是Java Jersey/Grizzly.)
一般情况下:
https://fetch.spec.whatwg.org/#http-network-fetch step17.2.3/4
如果流产,然后:
如果fetchParams被终止,则:
设置响应的终止标志。
如果流是可读的,那么错误流的结果为反序列化一个给定fetchParams的控制器的序列化中止原因序列化的中止原因和实现定义的领域。
否则,如果流是可读的,则使用TypeError错误流。
如果连接使用HTTP/2,则发送RstrongTREAM帧。
否则,用户代理应该关闭连接,除非它需要这样做对性能不利。
例如,用户代理可以保持连接打开,如果它知道在可重用对象上只剩下几个字节的传输空间连接。在这种情况下,关闭连接可能会更糟糕再次执行握手过程以获取下一次数据。
但是,Firefox目前可能无法在某些情况下(https://bugzilla.mozilla.org/show_bug.cgi?id=1568422)。