Range
요청 헤더 Ranges

개요

Range는 리소스 전체가 아닌 일부 구간(주로 바이트 범위)만 요청하는 헤더입니다. 큰 파일의 다운로드 재개, 미디어 스트리밍의 탐색(seek), 병렬 분할 다운로드에 필수적입니다.

자세히

`Range: bytes=0-1023`은 첫 1024바이트를 요청합니다. 서버가 지원하면 206 Partial Content로 요청 구간만 보내고, `Content-Range: bytes 0-1023/146515` 헤더로 '전체 중 어느 부분/전체 크기'를 알립니다. 서버가 범위 요청을 받을 수 있는지는 응답의 `Accept-Ranges: bytes`로 광고합니다. 서버가 범위를 무시하면 그냥 200 OK로 전체를 보냅니다.

`bytes=1000-`은 1000바이트째부터 끝까지, `bytes=-500`은 끝에서 500바이트를 뜻합니다. 요청 범위가 리소스 크기를 벗어나면 416 Range Not Satisfiable가 반환되며, 이때 `Content-Range: bytes */146515`로 실제 전체 크기를 알려줍니다.

다운로드 재개 시 리소스가 중간에 바뀌면 데이터가 뒤섞일 수 있으므로, `If-Range`(ETag 또는 날짜)를 함께 보내 '리소스가 그대로일 때만 부분 응답, 바뀌었으면 전체(200)'를 받도록 하는 것이 안전합니다.

문법

Range: <unit>=<start>-<end>[, <start>-<end>]*

e.g. Range: bytes=0-1023

지시어 / 값

bytes=<start>-<end>지정한 바이트 구간(양끝 포함)을 요청. 예: 0-1023은 첫 1KB.
bytes=<start>-start부터 끝까지 요청(다운로드 재개에 사용).
bytes=-<suffix>마지막 N바이트를 요청. 예: -500은 끝에서 500바이트.

실무 참고

관련 헤더

관련 상태코드

스펙 근거