GET может аутентифицироваться через прокси, тогда как POST или PUT завершается ошибкой неповторяемого тела или перемотки. Учётная запись может быть верной: обмен аутентификации может потребовать ещё один запрос после того, как клиент уже израсходовал загрузку.

Источник телаВыбор повторения
Небольшое конечное телоОграниченный буфер может сохранить его байты.
Файл с возможностью поискаПоддерживаемый клиентом интерфейс перемотки может сделать его повторяемым.
Генератор, канал или живой производительОднократному источнику может потребоваться другая архитектура.

libcurl документирует обратные вызовы поиска для применений, включая многоэтапную аутентификацию. Jersey предлагает буферизованный и фрагментированный режимы обработки сущностей в зависимости от поведения коннектора. Пример коннектора Jersey 2 Apache показывает буферизованную настройку. Ни то, ни другое не делает неограниченные загрузки в памяти уместными.

Воспроизведите метод и источник тела, которые дают сбой. Подготовительный GET не имеет загрузки для повторения и не доказывает, что последующая загрузка разделяет его соединение или состояние аутентификации. Новое назначение, клиентский объект или политика соединений могут это изменить. Тело на основе файла и живой поток тоже различаются, даже если их образец текста одинаков.

Если вы буферизуете, задайте предел размера, место хранения и время жизни. Одновременные загрузки умножают затраты, а конфиденциальные данные остаются там, где хранится буфер.

Предварительная аутентификация на известном совместимом прокси может избежать одного начального вызова. Однако она не может исключить каждый последующий раунд аутентификации, перенаправление или закрытое соединение, которые могут потребовать ещё одной попытки.

Держите вместе ответ прокси, точку расхода тела и ошибку повторения. Затем отличайте повторение протокола от неопределённого результата приложения: отправка могла быть обработана до потери её ответа. Перед повторной отправкой соблюдайте правила идемпотентности назначения.

Похожие статьи