Redirect와 retry

attempt 결과를 transport 실패와 HTTP 응답으로 먼저 분리

Redirect와 retry attempt 결과를 transport 실패와 HTTP 응답으로 먼저 분리 send attempt · Architecture component send attempt attempt outcome · Architecture component attempt outcome retry enabled? · non-streaming · Architecture component retry enabled? non-streaming return failure · Architecture component return failure full-jitter backoff · Architecture component full-jitter backoff redirect status? · Architecture component redirect status? return response · or status failure · Architecture component return response or status failure resolve Location · Architecture component resolve Location limit·valid? · Architecture component limit·valid? ProtocolError · Architecture component ProtocolError method·auth rules · Architecture component method·auth rules transport·timeout no yes HTTP response no 301·302·303·307·308 limit·invalid valid

Attempt 결과별 처리

  • • Transport failure 또는 timeout일 때만 retry 설정과 non-streaming 조건을 검사한다. 조건이 맞으면 full-jitter backoff 뒤 다시 시도하고, 아니면 failure를 반환한다.
  • • HTTP response일 때만 redirect status를 검사한다. redirect가 아니면 응답 또는 status failure를 반환하고, redirect이면 Location·한도·method·authorization 규칙을 적용한다.