Ativar pdf cache no IE
-
05-07-2019 - |
Pergunta
Em primeiro lugar, o cache não funciona em todos os navegadores. Então eu fiz o trabalho em todos os navegadores mas IE (IE8), adicionando extensão .pdf para a url. Servlet deixou de ser chamado depois disso.
Eu exibição pdf arquivo em linha na página web via EMBED tag que carrega a seguinte URL:
http://localhost:7001/app/viewFile.pdf
O que é gerado pelo servlet java com os seguintes cabeçalhos:
response.addHeader("Content-Disposition", "inline;");
response.setHeader("Cache-control", "cache,max-age=600");
response.setContentType(mimeType);
response.setContentLength(contentLength);
Para pdf exibir em todos os navegadores que eu uso Adobe Reader 9.2.0.
Como fazê-lo funcionar no IE também? Notei que o IE acrescenta 'Cache-Control: no-cache'. Cabeçalho para pedido , enquanto o Safari, por exemplo, não faz
Solução
Como disse antes, o cache-control
cabeçalho valor cache
é inválido. Use public
vez.
Quanto à IE não aderir às regras de controle de cache do lado do servidor nos elementos embed
e object
, este é, infelizmente, uma "característica" do IE. Melhor que você pode fazer é substituí-lo por um elemento iframe
.
Outros cabeçalhos como expires
, last-modified
, etag
e assim por diante não vai ajudar.
Outras dicas
Algumas idéias para olhar em:
-
Eu não acho que
cache
é uma directivaCache-Control
válido.Tente usar um valor de
public
vez, ouprivate
se isso é mais apropriado para o seu conteúdo. Confira RFC 2616 para obter mais informações. -
Talvez você está enviando mais de um directiva
Cache-Control
?Use uma ferramenta como Firebug ou LiveHTTPHeaders para espiada no cabeçalhos reais seus navegadores são recebendo. Certifique-se de que eles não são recebendo algo que você não espera. Parece que você pode já estar fazendo isso embora. Também certifique-se que você não está também enviando
Pragma: no-cache
. -
Tente configurar a cabeçalho
Expires
além de usarCache-Control
.Também é possível você está enviando o navegador conflitantes
Cache-Control
/Pragma
cabeçalhos e escolhe isto é, levar a cabeçalhosPragma
como primeira prioridade para qualquer razão para trás. -
Certifique-se IE está configurado para permitir o cache! :)
Control Panel
>Internet Options
>Temporary Internet Files
>Settings
>Check for newer versions of stored pages
-
Tente enviar o PDF como uma resposta a um pedido
POST
(via formulário de envio).IE está permitindo que um cache para ocorrer independentemente dos cabeçalhos na resposta devido a este requisito de RFC 2616 : "por padrão, a resposta é cacheable se as exigências do método de solicitação, campos pedido de cabeçalho, e o status de resposta indicam que é armazenado em cache." Respostas a pedidos
POST
não são armazenáveis ??em cache, assim IE não deve incluir esse cabeçalho nele do pedido. -
Tente enviar os cabeçalhos
Content-MD5
eLast-Modified
com valores consistentes (se não está já a ser enviada).Esta ajuda poder convencer IE que o conteúdo do PDF não mudou. Eu não acho que esta solução irá funcionar, porque o IE é, obviamente, teimoso, mas vale a pena mencionar.
Bem, uma maneira óbvia de contornar o problema é usar a reescrita de URL. Se IE trabalha com .pdf na extensão, o uso mod_rewrite (Apache) ou uma ferramenta semelhante ao redirecionamento do lado do servidor para a página direita, ao fazer o cliente pensar que ele é, na verdade solicitando um arquivo PDF.
Além disso: rever a cabeçalhos HTTP que o cliente está recebendo usando uma ferramenta como o Fiddler.
Além disso: rever esta questão mais velhos ( PHP: arquivo de download Força e IE, mais uma vez ), eu tive problemas semelhantes com o IE não forçando de downloads também.