HTTP: Как мне реагировать на «Range: bytes =», когда Range не поддерживается? - PullRequest
8 голосов
/ 01 июня 2011

Каков правильный ответ на запрос GET с полем заголовка Range: bytes=278528-, если Range не поддерживается?

Чтение определений заголовка HTTP (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html) Я думаю, что я должен вминимальное значение: Accept-Ranges: none, но в нем четко указано, что

Клиенты МОГУТ генерировать запросы в диапазоне байтов, не получив этот заголовок для задействованного ресурса.

Итак, есликлиент запрашивает диапазон, должен ли я:

Ответы [ 4 ]

8 голосов
/ 01 июня 2011

Вы можете игнорировать это, как сказано в спецификации.Чтобы быть точным:

  • Если вы поддерживаете его, вы возвращаете код состояния 206 Частичное содержимое и включаете соответствующие заголовки, такие как Content-Range.
  • Если вы не поддерживаете его, вы возвращаете 200 OK как обычно.

Я не проверял это, но спецификация кажется довольно ясной.Я видел эту работу - использование wget или curl для возобновления прерванной загрузки будет правильно перезапущено с самого начала, если сервер не поддерживает заголовок Range.

5 голосов
/ 01 июня 2011

RFC2616 раздел 14.35.2 говорит:

Сервер МОЖЕТ игнорировать заголовок Range.

0 голосов
/ 07 ноября 2017

Возможность проверить заголовок http и, если есть строка диапазона, проанализировать ее, проанализировать диапазоны, вычислить пропустить и занять позиции, открыть поток файлов из URL, затем попытаться пропустить и взять байты 'take', настройкаОтвет, отправить ответ и, наконец, закрыть поток.не забывайте отвечать заголовком диапазона

не игнорируйте диапазон, никогда, когда вы работаете с большими потоками.

если вы используете nanohttp, я могу помочь вам с примером

0 голосов
/ 05 октября 2017

Игнорирование запросов диапазона может привести к воспроизведению контента (который огромен) на сервисе трансляции или другого нестабильного или неприемлемого.Я знаю, что http не подходит протоколу для передачи видео, но попробуйте отправить видео в эфир с сервера, не принимающего диапазоны .... Airplay использует запросы диапазона ...

...