Как я могу запретить X-Sendfile обслуживать полный видеофайл, когда IE9 делает запрос?

Я столкнулся с проблемой, когда независимо от настройки атрибута предварительной загрузки, когда IE9 отправляет запрос на видео, а видео обслуживается x-sendfile, запрос отображается как ожидающий и сохраняет соединение открытым.

Следовательно, если у вас есть 10 видео, пытающихся загрузиться, IE9 быстро съест все доступные соединения, и браузер не сможет выполнять дальнейшие запросы.

При указании IE9 запросить то же видео у Apache без X-Sendfile, Apache обрабатывает небольшую часть файла как запрос 200. Затем браузер отправляет запрос позже, когда нажимается кнопка воспроизведения, чтобы отдать диапазон файла.

Похоже, что X-Sendfile заставляет Apache изначально обслуживать весь файл, а не только его часть.

Как сделать так, чтобы запросы X-Sendfile через Apache функционировали так же, как и обычные запросы к Apache?


person Kevin Somers-Higgins    schedule 10.12.2014    source источник


Ответы (1)


Установка заголовка «Accept-Ranges», такого как header("Accept-Ranges: bytes");, сообщает IE9, что нужно попытаться передать файл по умолчанию, а не обслуживать его одним фрагментом.

Перед настройкой рекомендуется проверить, что HTTP-запрос относится к версии 1.1, так как 1.0 не поддерживает заголовок.

if (isset($_SERVER['SERVER_PROTOCOL']) && $_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1') {
    header("Accept-Ranges: bytes");
}

Мне нигде не удалось найти документацию по этому вопросу, поэтому я публикую свое решение здесь.

person Kevin Somers-Higgins    schedule 10.12.2014
comment
установка заголовка Accept-Ranges не приводит к тому, что X-Sendfile вообще ничего не делает. Он сообщает клиенту, что вы поддерживаете Range: bytes запросы. - person hobbs; 11.12.2014
comment
@hobbs Хороший улов! Похоже, я пришел к правильному решению с неправильным выводом! Я исправлю свой ответ. - person Kevin Somers-Higgins; 11.12.2014