Изменить: то, что я написал ниже, относится к версии 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):
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, чтобы обмануть браузер в том, что ему разрешено делать. Тогда браузер будет более агрессивно кэшировать и сохранять видео при загрузке, учитывая, что все остальные требования удовлетворены.