HTTP: Как мне реагировать на "Range: bytes=", когда Range не поддерживается?

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

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам