Есть ли в JEE8 функция отмены обработки запроса HTTP 2 - PullRequest
0 голосов
/ 03 января 2019

HTTP 1.1 не имеет никакого механизма, чтобы попросить сервер отменить запрос. Можно получить поток ввода / вывода / ошибки из HttpURLConnection и закрыть их. Это может привести к IOException на стороне клиента, что позволит клиенту выполнить очистку после отмены. «Постоянное» или «keepAlive» TCP-соединение HTTP 1.1 будет продолжать существовать для будущих запросов. Поэтому сервер не узнает об этих событиях на стороне клиента, пока не попытается выполнить запись и произойдет сбой.

HTTP 2 предоставляет отдельный фрейм с именем RST_STREAM, чтобы закрыть поток или отменить запущенный запрос. Поскольку Java 9 HttpClient позволяет нам делать асинхронный HTTP-запрос, возвращающий CompletableFuture, теперь существует более элегантный способ отменить текущий запрос, используя метод cancel() CompletableFuture.

Мои вопросы:

  1. Действительно ли выпуски Java 9+ отправляют RST_STREAM на сервер при вызове cancel()?
  2. Предоставляет ли JEE8 какой-либо механизм для прерывания бизнес-логики, выполняемой для HTTP-запроса при получении RST_STREAM? Или какой-нибудь план будущих выпусков?

1 Ответ

0 голосов
/ 03 января 2019

В Java 11 для отмены запроса HTTP / 2 с помощью java.net.HttpClient вы должны будете указать свой собственный BodySubscriber (или обернуть одно из предоставленных встроенных) и отменить Flow.Subscription.Это должно сбросить поток HTTP / 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...