java - JEE8有没有取消HTTP 2请求处理的功能

标签 java http jakarta-ee

HTTP 1.1 没有任何机制要求服务器取消请求。可以从 HttpURLConnection 获取输入/输出/错误流并关闭它们。这将在客户端抛出 IOException,允许客户端在取消后进行清理。 HTTP 1.1 的“持久”或“keepAlive”TCP 连接将继续存在以供将来请求使用。因此,服务器在尝试写入并失败之前不会了解客户端的这些事件。

HTTP 2 提供了一个名为 RST_STREAM 的单独框架来关闭流或取消触发的请求。由于 Java 9 HttpClient 允许我们发出返回 CompletableFuture 的异步 HTTP 请求,现在有一种使用 cancel() 取消正在进行的请求的更优雅的方法 CompletableFuture 的方法。

我的问题:

  1. 调用 cancel() 时,Java 9+ 版本是否真的将 RST_STREAM 发送到服务器?
  2. JEE8 是否提供任何机制来中断在收到 RST_STREAM 时针对 HTTP 请求执行的业务逻辑?或 future 版本的任何计划?

最佳答案

在 Java 11 中,要取消使用 java.net.HttpClient 的 HTTP/2 请求,您必须提供自己的 BodySubscriber(或包装提供的构建之一-in) 并取消 Flow.Subscription。这应该会重置 HTTP/2 流。

关于java - JEE8有没有取消HTTP 2请求处理的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020329/

相关文章:

java - 如何使用 DocuSign API 预填充服务器模板上的选项卡

Java 在我的字符串中添加双引号

java - 实际情况如何使用抽象接口(interface)?

java - 如何通过jsp将一个表单元素复制到另一个表单元素?

java - EJB 计时器在检查状态时挂起

java - 如何为 Java Web 应用程序设置参数

javascript - 没有对具有相同 URL 的新图像的新请求

java - 将 REST\json httpclient4.2 切换为正常的 HttpURLConnection

ajax - 当 transport=ServerSentEvents 时,SignalR GET 请求 'Cancelled'

mysql - 无法注册新数据库