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

Foi útil?

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)

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