Зразок сеансу запиту діапазону http


91

Чи можна показати мені зразок сеансу http із запитами на діапазон. Я маю на увазі, якими б були заголовки запитів та відповідей?


2
Кілька місяців тому була опублікована нова версія стандарту HTTP / 1.1. Він має спеціальний RFC для запитів діапазону, це набагато легше читати, ніж старі специфікації, включаючи приклади для багатьох елементів: tools.ietf.org/html/rfc7233
Thirler,

Відповіді:


135

Наступний обмін між 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

Виявлено заголовок діапазону в попередній відповіді - наступний запит із відкритим діапазоном для підтвердження підтримки. Response повертає стан 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

7
У першому випадку, схоже, сервер повертає 64657027 байт вмісту. Отже, що відбувається - клієнт просто викидає цей вміст, а потім видає запит на діапазон для деталей, який дійсно хоче? Або сервер не повертає жодного вмісту, оскільки щось у повідомленні клієнта каже, що не робіть цього. Якщо так, то що це?
Моррі,

3
@Morrie - схоже, що сервер, знаючи, що сам підтримує запити на діапазон, каже клієнту "Я приймаю запити на діапазон" через Accept-Ranges: bytesзаголовок, але він також посилає довжину вмісту для ресурсу, щоб клієнт міг робити запити на діапазон із верхньою зв'язаний. Наскільки мені відомо, у повідомленні клієнта нічого не сказано, робіть це - сервер може вибрати відповідь "ось весь ресурс" або "Я приймаю запити діапазону" - що знову ж таки є Accept-Rangesзаголовок. Я все одно це розумію.
Саймон Уайтхед

4
Але чи не означає Content-Length 64657027 у першій відповіді, що насправді є стільки байтів корисного навантаження, що слідує за заголовком, які клієнт повинен споживати, оскільки зв’язок Keep-Alive? Мені цікаво, що у відповіді йдеться про те, що фактично немає корисного навантаження.
Моррі

1
@Morrie Keep-alive - це запит клієнта, і клієнт не зобов’язаний продовжувати використовувати з’єднання. Я щойно зробив висновок у своїй роботі, що, принаймні для chrome, перший запит GET із діапазоном "0-" негайно припиняється, як тільки отримується заголовок, замість використання запиту HEAD. Я вважаю, що це спосіб уникнути проблем із сервером, який може неправильно реалізувати дієслово HEAD.
Zoomulator
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.