2011-11-28 7 views
82

범위 요청이있는 샘플 http 세션을 보여줄 수 있습니까? 요청 헤더와 응답 헤더는 무엇을 의미합니까?샘플 http 범위 요청 세션

+2

몇 달 전 새로운 버전의 HTTP/1.1 표준이 게시되었습니다. 그것은 범위 요청을위한 특별한 RFC를 가지고 있습니다. 이것은 많은 항목에 대한 예제를 포함하여 이전 스펙보다 훨씬 읽기 쉽습니다 : https://tools.ietf.org/html/rfc7233 – Thirler

답변

128

다음은 Chrome과 정적 웹 서버 간의 교환으로, MP4 비디오를 가져옵니다.

동영상에 대한 최초 요청입니다. - 지원을 확인하는 개방형 범위 후속 요청 감지 이전 응답에

GET /BigBuckBunny_320x180.mp4 
     Cache-Control: max-age=0 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: 
     Accept: text/html,application/xhtml+xml,application/xml,*/* 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Accept-Encoding: gzip,deflate,sdch 
     Accept-Charset: ISO-8859-1,utf-8,* 
200 OK 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 64657027 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:24 GMT 

Range 헤더 : 서버가 범위 헤더를 지원하고 표시하기 위해 Accept-Ranges 응답 헤더를합니다. 파일의 끝에 포착

GET /BigBuckBunny_320x180.mp4 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: bytes=0- 
     Accept: */* 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Referer: http://localhost:8080/BigBuckBunny_320x180.mp4 
     Accept-Encoding: identity 
     Accept-Charset: ISO-8859-1,utf-8,* 
206 Partial Content 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 64657027 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:25 GMT 
     Content-Range: bytes 0-64657026/64657027 

후속 범위 요구 (아마 캡처 후단 메타) : 반응은 206 개 상태 및 응답 체에 존재하는 바이트를 나타내는 Content-Range 헤더를 반환

GET /BigBuckBunny_320x180.mp4 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: bytes=64312833-64657026 
     Accept: */* 
     If-Range: A023EF02BD589BC472A2D6774EAE3C58 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Referer: http://localhost:8080/BigBuckBunny_320x180.mp4 
     Accept-Encoding: identity 
     Accept-Charset: ISO-8859-1,utf-8,* 
206 Partial Content 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 344194 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:25 GMT 
     Content-Range: bytes 64312833-64657026/64657027 

사용자가 다운로드 한 범위를 넘어서 비디오 진행률 막대를 클릭하면 선택한 위치에서 재생을 시작하는 범위 요구가 발생합니다.

GET /BigBuckBunny_320x180.mp4 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: bytes=1073152-64313343 
     Accept: */* 
     If-Range: A023EF02BD589BC472A2D6774EAE3C58 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Referer: http://localhost:8080/BigBuckBunny_320x180.mp4 
     Accept-Encoding: identity 
     Accept-Charset: ISO-8859-1,utf-8,* 
206 Partial Content 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 63240192 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:25 GMT 
     Content-Range: bytes 1073152-64313343/64657027 
+7

공백 Transfer-Encoding 헤더는 HTTP 통신이 캡처 된 방식 또는이 헤더에 대해 빈 값을 생성하는 실제 HTTP 서버가 있습니까? – swl10

+7

첫 번째 경우 서버가 64657027 바이트의 콘텐츠를 반환하는 것처럼 보입니다. 그래서 무슨 일이 일어나고 있는지 - 고객이 단지 그 내용을 버리고 그 후에 부품에 대한 범위 요청을 실제로 내리고 있습니까? 또는 클라이언트의 메시지에서 무언가가 그렇게하지 않는다고 말하면 서버가 아무런 내용도 반환하지 않습니다. 그렇다면 무엇입니까? – Morrie

+2

@Morrie - 서버 자체가 범위 요구를 지원한다는 것을 알고 서버가 "Accept-Ranges : bytes"헤더를 통해 클라이언트에게 "Accept-Ranges : bytes"헤더를 통해 "범위 요청을 허용합니다."라고 알려주지 만 리소스의 콘텐츠 길이를 보냅니다. 클라이언트는 상한으로 범위 요청을 할 수 있습니다. 클라이언트 메시지의 아무 것도 내가 알 수있는 한 이렇게 말합니다. 서버는 "여기는 전체 리소스입니다"또는 "범위 요청을받습니다"라고 응답 할 수 있습니다 - 다시 'Accept-Ranges' 헤더가 있습니다 . 그것은 어쨌든 그것을 이해하는 것입니다. –