10. Redirect · Retry · Cookie¶
세 기능 모두 DSL 블록에서 활성화하며 좁고 예측 가능한 의미론을 따른다.
Redirect¶
followRedirects(max)로 활성화한다.
- 추적 상태:
301,302,303,307,308+Location헤더. - 메서드 rewrite:
303, 또는301/302+POST→GET으로 바꾸고 본문을 제거한다. Authorization보존 규칙: same-origin(scheme+host+port 동일) redirect에서는Authorization을 보존하고 cross-origin으로는 제거한다.max횟수를 넘기면 예외로 실패한다.- 지원 location: 절대(
http(s)://...)와 path-absolute(/...). - redirect 루프는 hop 사이에 스레드를 점유하지 않는다.
Retry¶
retry(attempts)로 transport 실패를 재시도한다(지수 백오프 + full jitter 간격(기본 50ms, 시도마다 2배, 상한 1초, 0~상한 무작위)).
- 재시도 대상: retriable transport 실패(연결 오류, timeout 등). status 코드(4xx/5xx) 자체는 재시도하지 않는다.
- streaming(다운로드 sink 또는 업로드 provider)은 rewind 불가이므로 retry에서 제외된다.
Cookie jar¶
cookies()로 활성화한다. 좁은 의미론을 따른다:
- host 정확 매칭으로 저장(
Domain속성 미지원). - 기본
Path=/.Path/Secure/Max-Age속성만 해석하고Domain/Expires는 무시. Max-Age<=0이면 삭제.- secure cookie는 secure(https) 요청에만 전송.
- host당 최대 128개, 초과 시 가장 오래된 것부터 제거.