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

Foi útil?

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:

  1. Eu não acho que cache é uma directiva Cache-Control válido.

    Tente usar um valor de public vez, ou private se isso é mais apropriado para o seu conteúdo. Confira RFC 2616 para obter mais informações.

  2. 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.

  3. Tente configurar a cabeçalho Expires além de usar Cache-Control.

    Também é possível você está enviando o navegador conflitantes Cache-Control / Pragma cabeçalhos e escolhe isto é, levar a cabeçalhos Pragma como primeira prioridade para qualquer razão para trás.

  4. Certifique-se IE está configurado para permitir o cache! :)

    Control Panel> Internet Options> Temporary Internet Files> Settings> Check for newer versions of stored pages

  5. 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.

  6. Tente enviar os cabeçalhos Content-MD5 e Last-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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top