- 클라이언트(웹브라우저)는 서버가 제공하는 컨텐츠에서 일부분을 다시 요청하거나 갱신할 필요가 있는 경우 발생
- HTTP Range 요청 헤더는 서버에게 데이터의 일부분만 요청하는 헤더
- HTTP 프로토콜 Range 헤더를 사용하는 경우
- 스트리밍같은 동영상 데이터일 경우 총 5분짜리 영상인데, 처음부터 2분까지만 먼저 다운 → 다시 다운로드를 받으려 할때, 굳이 0 ~ 2분까지 모든 데이터를 다시 받을 필요 X
- 웹서버에서 특정 파일을 다운로드 하고 있는 중 여러가지 이유로 다운로드가 완료되지 못하고 중간에 끊어지는 경우 발생 → 처음부터 다시 받기 보다는 중간에 다운로드가 끊긴 시점부터 다시 받으면 효율적
- HTTP 프로토콜에서 Range 헤더를 사용할 때 동작 흐름도
- 클라이언트는 웹서버에게 200~400 bytes에 해당하는 데이터를 달라고 요청
- 웹서버는 "206 Partial Content" 라는 상태코드 메시지와 함께 요청한 200~400 바이트에 해당하는 데이터를 전달함.
- 클라이언트는 Range 헤더를 통해 여러 부분을 한번에 요청 가능하며, 서버는 클라이언트가 요청한 범위에 대한 데이터를 전달 가능
- 범위가 유효하지 않다면, 서버는 "416 Range Not Satisfiable" 에러를 보냄
- 서버는 Range 헤더를 무시하고 200 상태 코드와 함께 전체 문서를 전송
Range 헤더 문법
Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
Range 헤더 사용 예제
Range: bytes=200-1000, 2000-6576, 19000-
지시자
1. <unit>
2. <range-start>
- 범위 요청의 시작 지점을 알리는 단위를 뜻하는 정수.
3. <range-end>
- 요청한 범위의 끝을 알리는 단위를 의미하는 정수.
- range-end 값은 옵션으로 사용할 수 있으며, 생략한다면 문서의 끝부분을 요청의 끝으로 사용