Реализуйте ConnectionReuseStrategy
с помощью метода keepAlive()
, который просто возвращает false.См. setConnectionReuseStrategy()
в HttpClientBuilder
.
. Вы также можете отправить заголовок Connection
со значением close
.
https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/ConnectionReuseStrategy.html
Пример:
List<Header> headers = new ArrayList<>();
headers.add(new BasicHeader(HttpHeaders.CONNECTION, "close"));
HttpClientBuilder builder = HttpClients.custom().setDefaultHeaders(headers)
.setConnectionReuseStrategy(
new ConnectionReuseStrategy() {
@Override
public boolean keepAlive(HttpResponse httpResponse, HttpContext httpContext) {
log.info("**** keepAlive strategy returning false");
return false;
}
});
CloseableHttpClient httpClient = builder.build();
HttpGet httpGet = new HttpGet("https://google.com");
CloseableHttpResponse response = httpClient.execute(httpGet);
log.info("Response status: " + response.getStatusLine());
response.close();
Некоторая дополнительная информация:
1.Заголовок Keep-Alive
Когда большинство людей произносят заголовок keep-alive
, они обычно имеют в виду другой заголовок, называемый Connection
.Два заголовка работают вместе:
HTTP/1.1 200 OK
...
Connection: Keep-Alive
Keep-Alive: timeout=5, max=1000
...
Заголовок Connection
является подсказкой о том, что соединение следует использовать повторно.Заголовок Keep-Alive
указывает минимальное количество времени, в течение которого соединение должно оставаться открытым, и максимальное количество запросов, для которых соединение может быть повторно использовано.
Общие значения для заголовка Connection
: keep-alive
и close
.И сервер, и клиент могут отправить этот заголовок.Если заголовок Connection
установлен на close
, заголовок Keep-Alive
игнорируется.
2.HTTP / 1.1 и HTTP / 2
При использовании HTTP / 1.1 соединения являются постоянными по умолчанию.Заголовок Keep-Alive
устарел (больше не определяется в спецификации HTTP), хотя многие серверы все еще отправляют их для обратной совместимости.
Клиенты, которые не могут обрабатывать постоянные соединения HTTP / 1.1, должны установить заголовок Connection
со значением close
.
HTTP / 2 использует мультиплексирование;Ни заголовок Connection
, ни заголовок Keep-Alive
не должны использоваться с HTTP / 2.
3.Эффект прокси и кешей
Вообще говоря, постоянные соединения не работают через непрозрачные прокси.Они будут молча отбрасывать любые заголовки Connection
или Keep-Alive
.
4.Обработка соединений
Поскольку постоянные соединения теперь используются по умолчанию в HTTP / 1.1, нам нужен механизм для контроля того, когда и как они используются.С HTTP-клиентом Apache ConnectionReuseStrategy
определяет, должно ли соединение быть постоянным, а ConnectionKeepAliveStrategy
указывает максимальное время простоя для повторного использования соединения.