Permitindo navegador caching via java
-
11-09-2019 - |
Pergunta
Tenha um bom dia,
Eu estou usando CacheFilter para filtrar um caminho certo para o meu servidor (que gera um fluxo de imagem para o fluxo de resposta). E eu configurei isso no meu web.xml da seguinte forma:
<filter>
<filter-name>imagesCache</filter-name>
<filter-class>com.samaxes.cachefilter.presentation.CacheFilter</filter-class>
<init-param>
<param-name>privacy</param-name>
<param-value>public</param-value>
</init-param>
<init-param>
<param-name>expirationTime</param-name>
<param-value>2592000</param-value>
</init-param>
</filter>
...
<filter-mapping>
<filter-name>imagesCache</filter-name>
<url-pattern>/my/path/*</url-pattern>
</filter-mapping>
Usando o meu firefox, se eu acessar meu url através da barra de endereço, ela atinge o servidor pela primeira vez, mas usa o cache durante sucedendo chamadas. No entanto, se a URL está dentro da minha página (ou seja <img src="..."/>
), parece bater o servidor o tempo todo.
[EDIT] Depois de mais alguns testes, o acesso a minha imagem através da barra de endereço não funciona o tempo todo. Mas caching parece funcionar mais vezes com ele do que. Quanto a saber se ele realmente, eu não tenho certeza.
Informações adicionais: meu caminho é algo como / my / path? então = alguns & query = cordas. Note que ele não tem uma extensão (ou seja, gif, png, jpeg) mas é mimetype está definido correctamente (image / gif, image / png, image / jpeg). Não tenho a certeza se a falta de extensão ou a presença das seqüências de consulta tem qualquer impacto. (Além disso, uma outra nota. Embora minha url tiver o Query cordas, estou usando a mesma seqüência uri + consulta e outra vez com meus testes).
Todas as ideias por quê?
Graças
Solução
Você quer olhar especialmente para qualquer cabeçalho Cache-Control em seu pedido. Se um pedido diz algo como Cache-Control: no-cache ou Cache-Control: max-age = 0, então caches não podem servir-se uma cópia em cache. Ou se a resposta tem um cabeçalho Expires que é muito próximos no tempo, então não pode ser armazenada em cache por muito tempo.
A lista completa de cabeçalhos e explicações é na especificação HTTP 1.1. Consulte Caching em HTTP (13) e Cabeçalho campo Definições (14)
O Firebug plug-in é uma boa maneira de verificar pedido e resposta cabeçalhos usando Firefox.
Também atente como você está usando Firefox. Apertar o botão de atualização é equivalente a dizer Cache-Control:. No-cache - ele diz que você deseja que o mais frescos possível copiar, que o leva todo o caminho de volta para o servidor Web de origem
Outras dicas
Eu iria investigar a solicitação HTTP sendo enviados - particularmente a cabeçalhos HTTP sendo enviado para essa solicitação de imagem. Você pode usar um plugin do Firefox , e / ou verificar os cabeçalhos no a fim de servlet (no objecto HttpServletRequest
)