4

Есть ли способ заставить браузер кэшировать загруженные видео YouTube при загрузке страницы?

Другими словами, если вы обновляете некоторую страницу видео, на которой видео уже загружено (или полностью загружено), проигрыватель / браузер начинает повторную загрузку видео полностью, даже при использовании того же разрешения, вместо использования версии, уже находящейся в кэше. , Есть ли способ изменить это поведение?

Вышеуказанное наблюдается при использовании Flash-проигрывателя и экспериментального HTML5- проигрывателя.

1 ответ1

2

Изменить: то, что я написал ниже, относится к версии HTML5 (в которой браузер контролирует все), во Flash-версии настройки Flash также могут быть важны.


К сожалению, что касается, в частности, YouTube, дело очень сложное (возможно, это проще на других видео сайтах).

Во- первых, реклама Firefox кэширование аудио / видео файлы, но about:config настройка конфигурации может повлиять на вещи:

browser.cache.disk.enable
browser.cache.memory.enable
browser.cache.disk.capacity
browser.cache.disk.max_entry_size
browser.cache.memory.max_entry_size

Вам необходимо включить как минимум один из двух типов кэшей и установить соответствующий размер кэша, а также дополнительно достаточно высокий max_entry_size . Изначально max_entry_size не очень высокий, это имеет смысл, так как обычно вы не хотите стирать половину своего кэша для хранения видео HD VEVO.

Итак, браузер хорошо. Следующий шаг - ограничения кэша на стороне сервера. Я открыл случайное видео на YouTube (загруженный пользователем, не защищенный авторским правом, он может отличаться, но не проверял), и вот заголовки ответа FLV-файла (взятого с Fiddler):

Заголовки ответа HTTP, Fiddler

  • Cache-control: private файл означает, что файл может быть кэширован в вашем браузере, но не любым промежуточным кешем (например, кеш провайдера)
  • Если указаны Expires и max-age , то max-age выигрывает:

    14.9.3 Модификации Базового Механизма Истечения

    Если ответ включает в себя как заголовок Expires, так и директиву max-age, директива max-age переопределяет заголовок Expires, даже если заголовок Expires является более ограничительным

Пока все хорошо, max-age означает, что мы можем кэшировать его локально в браузере в течение ~ 6 часов.

Но давайте обновим страницу или загрузим ее на новой вкладке и сравним список HTTP-запросов:

http://o-o---preferred---sn-vg5obx-hgnl---v12---lscache5.c.youtube.com/videoplayback?upn=mY2b-T1WqcI&...
http://o-o---preferred---sn-vg5obx-hgnl---v12---lscache5.c.youtube.com/videoplayback?upn=U175csZ9oyw&...

Похоже, что YouTube добавляет параметры либо для отслеживания количества воспроизведений, либо для борьбы со злоупотреблениями (чтобы иметь непредсказуемые URL-адреса видео), или что-то еще.

При открытии в новой вкладке я даже иногда видел разные целевые серверы (балансировщик нагрузки в работе):

http://o-o---preferred---sn-vg5obx-hgnl---v12---lscache5.c.youtube.com/videoplayback?..
http://o-o---preferred---sn-25g7rn7s---v12---nonxt5.c.youtube.com/videoplayback?..

То же самое относится и к просмотру видео на основе Flash и HTML5.

Поскольку URL-адреса разные (даже если это был один символ), браузер должен повторно загрузить все видео.

Почему разные URL видео нацелены каждый раз? Это потому, что URL-адреса, с которых запрашиваются видео, например:

http://www.youtube.com/watch?v=[[videoid]]
http://youtube.googleapis.com/v/[[videoid]]

иметь заголовок ответа

Cache-Control: no-cache

Это означает, что браузеру вообще не разрешено кэшировать эту страницу, каждый раз, когда возникает запрос к нужному серверу, сервер отвечает новым ответом 200 OK и различными параметрами, которые будут использоваться для запроса видео.

Другие видео-сайты могут быть не такими уж ограничивающими, и, следовательно, вы можете кэшировать видео между загрузками.

-

Я заметил еще более интересную вещь при открытии видео (это было ~ 5 МБ) в IE8. В Firefox все видео загружается как один поток. В IE8 это отправляется как три ~ 1,7 МБ. Возможно, какая-то внутренняя вещь IE, которая не может хорошо обрабатывать большие файлы.

-

Как включить кеширование?

Можно написать дополнение к Firefox или сценарий Fiddler, который удалит или заменит соответствующие заголовки, связанные с кэшем, из HTTP-ответов YouTube, чтобы обмануть браузер в том, что ему разрешено делать. Тогда браузер будет более агрессивно кэшировать и сохранять видео при загрузке, учитывая, что все остальные требования удовлетворены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .