본문 바로가기
웹개발/기타

웹 캐시 저장 방지하기

by heavenLake 2022. 10. 17.
반응형

 

 

밑에 설정들은 캐시 방지용이지 기존에 있던 캐시를 삭제하는 기능은 아니다.

기존에 있던 캐시를 무시하는건 쿼리스트링에 ver을 넣어 호출하는 방법이 있다.

(이렇게 하면 스크립트 버전을 관리해야하기 때문에 불편해질수 있다.)

=> 참고 : https://domdom.tistory.com/m/entry/%EC%BA%90%EC%8B%9C%EB%B0%A9%EC%A7%80-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EC%8B%9C-CSS-JS-Image-%EC%BA%90%EC%8B%9C-%EB%B0%A9%EC%A7%80%ED%95%98%EB%8A%94-%EB%B2%95

 

 

 

 

HTML 파일에 설정 :

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />

 

JSP 파일에 설정 :

<% 
    response.setHeader("Cache-Control","no-store"); 
    response.setHeader("Pragma","no-cache"); 
    response.setDateHeader("Expires",0); 
    if (request.getProtocol().equals("HTTP/1.1"))
      response.setHeader("Cache-Control", "no-cache");
%>

 

Spring MVC Controller methods 설정 :

@Controller
public class TheController {
@RequestMapping(value = "/test")
public String handle1 (HttpServletResponse response) {
response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate");
return "myView";
  }
}

 

Spring MVC WebContentInterceptor 설정 :


밑에 설정은 잘 안되는 듯하다?? 테스트 필요

<mvc:interceptors>

    <beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
        <beans:property name="cacheSeconds" value="0" />
        <beans:property name="useExpiresHeader" value="true" />
        <beans:property name="useCacheControlHeader" value="true" />
        <beans:property name="useCacheControlNoStore" value="true" />
    </beans:bean>
</mvc:interceptors>
 
또는…
 
// interceptor 에 등록

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(webContentInterceptor());
}
// webContentInterceptor bean 등록
@Bean
public WebContentInterceptor webContentInterceptor() {
WebContentInterceptor webContentInterceptor = new WebContentInterceptor();
webContentInterceptor.addCacheMapping(CacheControl.noStore().noCache().mustRevalidate(), "/api/**");
return webContentInterceptor;
}


// Filter에 등록
// =>> 필터에 등록하는걸 추천.  js나 css는 interceptor까지 호출이 안되는 듯하다. 
//예제는 밑에 첨부한다.

response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate");

 

WebAuthorityFilter.java
0.00MB

 

위 설정들이 잘 됐는지 확인은 브라우저 디버깅모드에서 response 헤더에 

Cache-Control(Http 1.1인경우) 또는 Pragma(Http 1.0인경우) 확인

만약을 위해 둘다 설정 추천.

 

 

 

 

참고사이트 : https://jookting.tistory.com/m/79

 

웹서버 no-cache 설정

HTML 파일에 설정 : JSP 파일에 설정 : Spring MVC Controller methods 설정 : @Controller public class TheController { @RequestMapping(value = "/test") public String handle1 (HttpServletResponse response) { response.setHeader(HttpHeaders.CACHE_CONT

jookting.tistory.com

 

반응형

댓글