Editar : as coisas que escrevi abaixo contêm para a versão HTML5 (na qual o navegador controla tudo), na versão Flash, as configurações do Flash também podem ser importantes.
Infelizmente, em relação ao YouTube, o caso é muito complicado (talvez seja mais simples em outros sites de vídeo).
Primeiro, os arquivos de áudio / vídeo do cache do Firefox do Firefox, essa configuração about:config
pode afetar as coisas:
browser.cache.disk.enable
browser.cache.memory.enable
browser.cache.disk.capacity
browser.cache.disk.max_entry_size
browser.cache.memory.max_entry_size
Você precisa ter pelo menos um dos dois tipos de caches ativados, e o tamanho apropriado do cache definido, além do alto max_entry_size
. Inicialmente, max_entry_size
não é muito alto, isso faz sentido, já que você não quer geralmente limpar metade do seu cache para armazenar um vídeo HD VEVO.
Ok, então o lado do navegador está bem. O próximo passo é as restrições de cache do lado do servidor. Eu abri um vídeo aleatório do YouTube (o usuário fez upload, não é protegido por direitos autorais, pode ser diferente, mas não foi verificado), e aqui estão os cabeçalhos de resposta do arquivo FLV (tirado com o Fiddler):
Cache-control:private
significaqueoarquivopodeserarmazenadoemcachenoseunavegador,masnãoporqualquercachêintermediário(porexemplo,cachedoISP)Se
Expires
emax-age
foremespecificados,max-age
wins :14.9.3 Modificações do mecanismo básico de expiração
If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, even if the Expires header is more restrictive
Até aqui tudo bem, max-age
significa que podemos armazenar em cache localmente no navegador por ~ 6 horas.
Mas vamos atualizar a página ou carregá-la na nova guia e comparar a lista de solicitações 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&...
Parece que o YouTube adiciona parâmetros para rastrear o número de reproduções, para combater o abuso (para ter URLs de vídeo não previsíveis) ou o que for.
Ao abrir em uma nova guia, às vezes eu vejo diferentes servidores segmentados (balanceador de carga no trabalho):
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?..
É o mesmo com a exibição de vídeos com base em Flash e HTML5.
Como os URLs são diferentes (mesmo que seja por um caractere), o navegador precisa baixar novamente o vídeo inteiro.
Por que URLs de vídeo diferentes estão sendo segmentados a cada vez? Isso ocorre porque os URLs dos quais os vídeos são solicitados, como esses:
http://www.youtube.com/watch?v=[[videoid]]
http://youtube.googleapis.com/v/[[videoid]]
tem um cabeçalho de resposta
Cache-Control: no-cache
o que significa que o navegador não tem permissão para armazenar em cache esta página, toda vez que houver uma solicitação ao servidor necessária, o servidor responderá com 200 novas respostas OK e parâmetros diferentes para serem usados para consultar o vídeo.
Outros sites de vídeo podem não ser tão restritivos e, portanto, você pode colocar o vídeo em cache entre as cargas.
-
Eu notei algo ainda mais interessante ao abrir um vídeo (era ~ 5 MB) no IE8. No Firefox, todo o vídeo é carregado como um fluxo único. No IE8, ele é enviado como três pedaços de 1,7 MB. Talvez alguma coisa interna do IE que não consegue lidar muito bem com arquivos grandes.
-
Como habilitar o cache?
Pode-se escrever um addon para o Firefox ou um script do Fiddler, que tira ou substitui os cabeçalhos apropriados relacionados ao cache das respostas HTTP do YouTube, para enganar o navegador sobre o que é permitido fazer. Em seguida, o navegador armazenará em cache de forma mais agressiva e manterá o vídeo entre as cargas, considerando que todos os outros requisitos estejam satisfeitos.