Which HTTP errors should never trigger an automatic retry?

There are some errors that should not be retried because they seem permanent:

  • 400 Bad Request
  • 401 Unauthorized
  • 402 Payment Required
  • 403 Forbidden
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 407 Proxy Authentication Required
  • 409 Conflict – it depends
  • 410 Gone
  • 411 Length Required
  • 412 Precondition Failed
  • 413 Payload Too LargeĀ 
  • 414 URI Too Long
  • 415 Unsupported Media Type
  • 416 Range Not Satisfiable
  • 417 Expectation Failed
  • 418 I’m a teapot – not sure about this one
  • 421 Misdirected Request
  • 422 Unprocessable Entity
  • 423 Locked – it depends on how long a resource is locked in average (?)
  • 424 Failed Dependency
  • 426 Upgrade Required – can the client be upgraded automatically?
  • 428 Precondition Required – I don’t thing that the precondition can be
    fulfiled the second time without retring from the beginning of the
    whole process but it depends
  • 429 Too Many Requests – it depends but it should not be retried to fast
  • 431 Request Header Fields TooLarge
  • 451 Unavailable For Legal Reasons

So, most of the 4** Client errors should not be retried.

The 5** Servers errors that should not be retried:

  • 500 Internal Server Error – it depends on the cause of the error
  • 501 Not Implemented
  • 502 Bad Gateway – I saw used for temporary errors so it depends
  • 505 HTTP Version Not Supported
  • 506 Variant Also Negotiates
  • 507 Insufficient Storage
  • 508 Loop Detected
  • 510 Not Extended
  • 511 Network Authentication Required

However, in order to make the microservices more resilient you should use the Circuit breaker pattern and fail fast when the upstream is down.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)