웹개발/기타

웹 캐시 저장 방지하기

heavenLake 2022. 10. 17. 13:13
반응형

 

 

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

기존에 있던 캐시를 무시하는건 쿼리스트링에 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

 

반응형