http 범위 요청 세션 샘플


91

범위 요청이있는 샘플 http 세션을 보여줄 수 있습니까? 요청 및 응답 헤더가 무엇일까요?


2
몇 달 전에 HTTP / 1.1 표준의 새 버전이 게시되었습니다. 범위 요청에 대한 특수 RFC가 있으며 많은 항목에 대한 예제를 포함하여 이전 사양보다 훨씬 읽기 쉽습니다
Thirler

답변:


136

다음 교환은 Chrome과 정적 웹 서버간에 이루어지며 MP4 비디오를 검색합니다.

초기 요청-비디오 용. 노트 Accept-Ranges서버가 범위 헤더를 지원하고 표시하는 응답 헤더를 :

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

이전 응답에서 범위 헤더가 감지되었습니다. 지원을 확인하기위한 개방형 범위가있는 후속 요청입니다. 응답은 206 상태와 Content-Range헤더를 반환 하여 응답 본문에있는 바이트를 나타냅니다.

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

파일 끝을 캡처하기위한 후속 범위 요청 (아마도 후행 메타 데이터 캡처) :

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 jul.

7
첫 번째 경우에는 서버가 64657027 바이트의 콘텐츠를 반환하는 것처럼 보입니다. 그래서 무슨 일이 일어나고 있습니까? 클라이언트가 해당 콘텐츠를 버리고 나중에 실제로 원하는 부분에 대한 범위 요청을 발행합니까? 또는 클라이언트의 메시지에있는 무언가가 그렇게하지 말라고했기 때문에 서버가 콘텐츠를 반환하지 않는 것입니다. 그렇다면 무엇입니까?
Morrie 2015 년

3
@Morrie-서버가 자체적으로 범위 요청을 지원한다는 것을 알고있는 것처럼 보이며 Accept-Ranges: bytes헤더 를 통해 클라이언트에게 "범위 요청을 수락합니다"라고 말하지만 리소스에 대한 콘텐츠 길이를 전송하여 클라이언트가 상위 값으로 범위 요청을 할 수 있도록합니다. 경계. 클라이언트 메시지에는 내가 아는 한 이렇게하라는 내용이 없습니다. 서버는 "여기에 전체 리소스가 있습니다"또는 "범위 요청을 수락합니다"로 응답하도록 선택할 수 있습니다. 이는 다시 Accept-Ranges헤더 의 존재입니다 . 어쨌든 그것이 나의 이해입니다.
Simon Whitehead

4
그러나 첫 번째 응답에서 Content-Length가 64657027이라는 것은 실제로 연결이 Keep-Alive이기 때문에 클라이언트가 소비해야하는 많은 바이트의 페이로드가 헤더 뒤에 있음을 의미하지 않습니까? 그 응답 메시지에서 실제로 페이로드가 없다고 말하는 것이 궁금합니다.
Morrie

1
@Morrie Keep-alive는 클라이언트의 요청이며 클라이언트는 연결을 계속 사용할 의무가 없습니다. 내 작업에서 최소한 크롬의 경우 범위가 "0-"인 첫 번째 GET 요청이 HEAD 요청을 사용하는 대신 헤더가 수신되는 즉시 중단된다는 결론을 내 렸습니다. HEAD 동사를 올바르게 구현하지 않을 수있는 서버의 문제를 피하는 방법이라고 생각합니다.
Zoomulator
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.