• 클라이언트(웹브라우저)는 서버가 제공하는 컨텐츠에서 일부분을 다시 요청하거나 갱신할 필요가 있는 경우 발생
  • HTTP Range 요청 헤더는 서버에게 데이터의 일부분만 요청하는 헤더
  • HTTP 프로토콜 Range 헤더를 사용하는 경우
    1. 스트리밍같은 동영상 데이터일 경우 총 5분짜리 영상인데, 처음부터 2분까지만 먼저 다운 → 다시 다운로드를 받으려 할때, 굳이 0 ~ 2분까지 모든 데이터를 다시 받을 필요 X
    2. 웹서버에서 특정 파일을 다운로드 하고 있는 중 여러가지 이유로 다운로드가 완료되지 못하고 중간에 끊어지는 경우 발생 → 처음부터 다시 받기 보다는 중간에 다운로드가 끊긴 시점부터 다시 받으면 효율적

  • HTTP 프로토콜에서 Range 헤더를 사용할 때 동작 흐름도
    1. 클라이언트는 웹서버에게 200~400 bytes에 해당하는 데이터를 달라고 요청
    2. 웹서버는 "206 Partial Content" 라는 상태코드 메시지와 함께 요청한 200~400 바이트에 해당하는 데이터를 전달함.
    3. 클라이언트는 Range 헤더를 통해 여러 부분을 한번에 요청 가능하며, 서버는 클라이언트가 요청한 범위에 대한 데이터를 전달 가능
    4. 범위가 유효하지 않다면, 서버는 "416 Range Not Satisfiable" 에러를 보냄
    5. 서버는 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>

  • 범위를 결정하는 단위.
  • 보통 bytes

2. <range-start>

  • 범위 요청의 시작 지점을 알리는 단위를 뜻하는 정수.

3. <range-end>

  • 요청한 범위의 끝을 알리는 단위를 의미하는 정수.
  • range-end 값은 옵션으로 사용할 수 있으며, 생략한다면 문서의 끝부분을 요청의 끝으로 사용


'HTTP > HTTP 헤더' 카테고리의 다른 글

HTTP 프로토콜 Vary 헤더  (0) 2022.06.25
HTTP 프로토콜 server 헤더  (0) 2022.06.25
HTTP 프로토콜 Pragma 헤더  (0) 2022.06.25
HTTP 프로토콜 Last-Modified 헤더  (0) 2022.06.25
HTTP 프로토콜 Keep-Alive 헤더  (0) 2022.06.25

+ Recent posts