Каковы http-коды для автоматического повтора запроса?

Я использую сочетание Spring-Cloud + feign + spring-retry, чтобы помочь повторить запросы на стороне клиента (все это серверные части на основе Kotlin).

Моя конфигурация с весенней загрузкой выглядит так:

myApp:
  ribbon:
    OkToRetryOnAllOperations: true
    retryableStatusCodes: 404, 503

(примечание: OkToRetryOnAllOperations=true присутствует только для повторения запросов POST/PUT)

Повторная попытка HTTP-кодов 404 и 503 звучит хорошо, но я не могу понять, есть ли «классический» или «по умолчанию» список кодов ошибок для повторной попытки. Существует ли такая хорошая практика?

Мы предполагаем, что все запросы являются идемпотентными на стороне сервера (в противном случае повторная попытка может вызвать проблемы).


person Jeremy L    schedule 09.08.2018    source источник
comment
Эти коды также могут иметь значение для повторных запросов: 408, 500, 502, 504?   -  person Jeremy L    schedule 09.08.2018


Ответы (1)


В качестве очень грубого практического правила:
4XX - клиент сделал что-то плохое
5XX - сервер сделал что-то плохое

Но это во многом зависит от фактического API.
Стоит ли повторять 500? Возможно, из-за неожиданного сбоя сервера при подключении к БД. Или, может быть, вы отправляете ему что-то, чего он не ожидает, и вместо того, чтобы вернуть вам 4XX, он вылетает.

Обычно нет особых причин для повторной попытки 404, если только вы не ожидаете, что этот ресурс появится.

Единственными допустимыми HTTP-кодами для повторной попытки являются 408, 502, 503 и 504.

person Alexey Soshin    schedule 09.08.2018
comment
Спасибо за ваш ответ. Я думал, что 404 актуален в случае проблем с сетью на стороне клиента, не так ли? - person Jeremy L; 09.08.2018
comment
Нет, потому что это ошибки, возвращаемые сервером. То, что вы получили 404, означает, что вам удалось достучаться до сервера. - person Alexey Soshin; 09.08.2018
comment
вы правы, если ресурс не существует, нет никаких шансов, что повторная попытка заставит его появиться... спасибо! - person Jeremy L; 10.08.2018
comment
429 также можно повторить. - person sbenderli; 15.06.2021