2011-09-01 7 views
0

Java Servlet 링크가 호출 될 때 이미지를 출력하려고합니다. 현재 다음을 사용 중입니다.Java Servlet Cache Aggresively

response.addHeader("Cache-Control", "max-age=" + CACHE_INTERVAL); 
response.addDateHeader("Expires", System.currentTimeMillis() + (1000*CACHE_INTERVAL)); 

하지만 여전히 이미지가 서버에서 다시로드됩니다. 이에 비해이의 태그를 보면 :

http://graph.facebook.com/502547234/picture

그것은 결코이어야 파이어 폭스에서 다시 다시로드하지 않습니다. 어떤 제안? 내가 뭘 놓치고 있니?

업데이트 헤더 :

광산 : http://i.imgur.com/ikfVL.png

FB : http://i.imgur.com/o0KsM.png

+0

'때때로'는 '때때로'또는 '항상'을 다시로드한다는 의미입니까? – home

+0

간혹 새로 고침을 말하는 것이 아닙니다. 나는 페이스 북의 링크가 내 304가 수정 된 헤더를 내 던지는 것을 알고있다. 내 것이 항상 200 OK이다. –

+1

이것은 http://stackoverflow.com/questions/2872613/caching-images-served-by-servlet의 복제본 인 것 같다 –

답변

1

헤더를 비교 당신은 Last-Modified 필드가 누락하고 있습니다. 응답에이 필드를 설정하면 브라우저에서 다음 번에 If-Modified-Since 요청 헤더 필드를 사용하여 이미지를 요청할 수 있습니다.

변경되지 않은 경우 304 Not Modified으로 응답 할 수 있습니다.

대체로 Last-Modified 헤더를 사용하는 대신 E-Tag을 사용할 수 있습니다.


그러나 나는 당신의 이미지가 당신이하는 것처럼 캐쉬되지 않는다고 생각하고 있습니다. 지금까지 대부분의 브라우저에서 가장 공격적인 캐싱을 수행하고 있다는 것을 알고있는 한 expires까지 새로운 버전을 요구하지 않았지만 전혀 요청이 전혀 없었습니다. 이것은 가능한 가장 적극적인 캐싱입니다.

캐시되지 않는 한 가지 이유는 서블릿이라고 부르는 URL 일 수 있습니다. 그것은 어떻게 생겼습니까?

+0

내 게시물을 헤더로 업데이트했습니다. 질문, 어떻게 수정하지 304 반환합니까? –

+0

resp가'HttpServletResponse'의 인스턴스 인'resp.setStatus (HttpServletResponse.SC_NOT_MODIFIED)'로 설정할 수 있습니다. 희망이 도움이됩니다. –

+0

SC_NOT_MODIFIED를 반환 할시기를 어떻게 알 수 있습니까? 실제 코드로 상태 200을 반환해야한다면 atleast를 의미합니다. If-Modified-Since 태그가 설정되었는지 어떻게 확인합니까? 코드를 안내해 주시겠습니까? –

관련 문제