Клиент Apache Http выполняет запрос без отправки включающего объекта

У меня есть такой сценарий:

1) Клиент отправляет HTTP-запрос с закрывающей сущностью на сервер через сокет.

2) Сервер выгружает закрывающий объект в другое место, назовем его Хранилище.

От меня требуется реализовать только Сервер.

До сих пор мне удалось реализовать его с помощью библиотеки компонентов HTTP Apache, используя что-то вроде:

// The request from the client
org.apache.http.HttpRequest request = ...;

// The org.apache.http.entity.InputStreamEntity will 
// read bytes from the socket and write to the Storage
HttpEntity entity = new InputStreamEntity(...)

BasicHttpEntityEnclosingRequest requestToStorage = new ......
requestToStorage.setEntity(entity);

CloseableHttpClient httpClient = ...

CloseableHttpResponse response = httpClient.execute(target, requestToStorage );

Все идет нормально. Проблема в том, что сервер хранения требует аутентификации. Когда Сервер делает первый запрос (через Apache Http Client API), Хранилище отвечает запросом 407 Authentication Required. Клиент Apache Http выполняет первоначальное рукопожатие, а затем повторно отправляет запрос, но теперь нет никакой сущности, поскольку она уже была использована для первого запроса.

Одно из решений - кэшировать объект от клиента, но он может быть очень большим, более 1 ГБ.

Вопрос: Есть ли лучшее решение, например, предварительная отправка только заголовков запроса?

1 ответ

Использовать expect-continue рукопожатие.

CloseableHttpClient client = HttpClients.custom()
        .setDefaultRequestConfig(
                RequestConfig.custom()
                        .setExpectContinueEnabled(true)
                        .build())
        .build();
Другие вопросы по тегам