Cache de imagem no browser - existe isso?

5 respostas
alias

Olá amigos!Venho pedir ajuda rapida dos colegas de forum para resolver um problema besta :lol:, que estou em duvida se deixo do jeito que está, se faço de outra maneira ou se realmente há um problema…

Estou trabalhando em uma aplicação GWT+GXT, tenho uma funcionalidade que vou buscar uma imagem gravada no banco em um campo blob. Criei uma tag passando no src o caminho de um servlet, que retorna a imagem. Não vou entrar nesse detalhe pois isso está funcionando.

Bom, aí eu abro um pop-up e o processamento vai no servlet, retorna a imagem e exibe a imagem na janela, ok. Fecho a tela, altero a imagem do banco, e quando abro novamente o pop-up, ele nao vai novamente no servlet buscar a nova imagem, exibe a mesma imagem anterior, já desatualizada com relação ao banco. Me parece que é um tipo de cache, para nao precisar carregar a imagem novamente.Normalmente isso seria otimo, mas está me atrapalhando :lol:. Os browsers funcionam mesmo dessa forma?

Obrigado!

5 Respostas

gomesrod

Sim, é assim mesmo que funciona - quem nunca teve esse problema quando trocou a foto do orkut? :slight_smile:

A boa notícia é que você pode controlar o cache através de headers HTTP enviados na resposta do seu Servlet.
Faça a pesquisa abaixo no google que vem algumas informações interessantes:
http://www.google.com.br/search?hl=pt-BR&source=hp&q=browse+cache+headers&meta=&aq=f&oq=

alias

Às vezes até as coisas boas atrapalham hehehe

Vou fazer uma pesquisa sobre isso velho, obrigado pela ajuda!

alias

Olá amigos!

Dando um up descarado no topico para informar que não funcionou...fiz um teste superficial, admito, mas já venho aos camaradas de forum verificar se há algo de errado...

@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");   
		resp.setHeader("Pragma", "no-cache");
		resp.setDateHeader("Expires", 0);
		resp.setContentType("image/jpeg");  

		String id = req.getParameter("Id");
		String img = req.getParameter("Img");
		
		CarroceriaVeiculoDao daoObject = DaoFactory.getInstance().getCarroceriaVeiculoDao();
		CarroceriaVeiculoTO c;
		try {
			c = daoObject.getImage(Integer.valueOf(id), img);
			
			if (c.getImagem() != null){
				ServletOutputStream out = resp.getOutputStream();
			    
			    out.write(c.getImagem());
			    
			    out.flush();   
				out.close();
			}
			
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}

Está faltando algo para a maldita imagem nao ficar no cache?

Obrigado!

Naruffy

eu sempre coloco esses headers nos meus servltes para não manter cache.

response.setHeader("Expires", "Sat, 1 Jan 1990 12:00:00 GMT");
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        response.setHeader("Pragma", "no-cache");

[]s

alias

Naruffy:
eu sempre coloco esses headers nos meus servltes para não manter cache.

response.setHeader("Expires", "Sat, 1 Jan 1990 12:00:00 GMT");
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        response.setHeader("Pragma", "no-cache");

[]s

Valeu amigo, vou alterar e testar!

Criado 1 de setembro de 2009
Ultima resposta 4 de set. de 2009
Respostas 5
Participantes 3