170 похожих чатов

Доброго времени суток. Я пытаюсь разобраться в работе java.net.http.HttpClient Столкнулся с

тем, что клиент после получения данных не закрывает TCP сессию.
После того как HTTP запрос уходит на удалённый сервер, сервер отвечает. Но клиент не отправляет пакеты с флагом FIN как я ожидал, если сервер после передачи запрошенных данных присылает кипэлайвед, клиент отвечает на них. И из того, что я вижу в дампах трафика сессию закрывает всегда сервер. Единственный способ заставить HttpClient завершить сессию который я нашёл выглядит как зануление ссылки на клиент и вызов сборщика мусора, но это же не выход.

код простейший, можно посмотреть тут: https://github.com/maxpushpashev/httpClient

При использовании например HttpClient от Apache можно вызвать метод закрытия сессии. А тут не вижу такого.
Может я что-то делаю не так?

4 ответов

12 просмотров

-Dhttp.keepAlive=false

Максим- Автор вопроса
Alex
-Dhttp.keepAlive=false

Завтра гляну. Спасибо

Ситуация то что клиент не закрывает соединение сам пока ему не скажет об этом сервер следует из того что HttpClient поддерживает HTTP 1.1 в котором вот такое поведение стандартное. HTTP/1.1 defines the "close" connection option for the sender to signal that the connection will be closed after completion of the response. For example, Connection: close in either the request or the response header fields indicates that the connection SHOULD NOT be considered `persistent' (section 8.1) after the current request/response is complete. Следуя букве закона можно послать сообщение "Connection: close" в header и тогда сервер должен соединение закрыть и не открывать новое. (Как всегда некоторые серверы это могут игнорировать). Закроется ли правильно соединение в пуле java.net.http.HttpClient нужно проверять, тут я к сожалению опыта не имею, проверять самому не приходилось.

Максим- Автор вопроса
Evgeniy Latuhin
Ситуация то что клиент не закрывает соединение сам...

Спасибо. И правда помогло. Только хидер restricted и его надо разрешить через систем проперти, которое в openJDK 11.0.12 не работает, но работает в coretto11.0.14

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта