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