2017-05-21 11 views
0

나는 파일 시스템에서 Spring @Controller을 통해 파일을 제공하고 브라우저 캐시를 최대한 활용하고자한다.수정 될 때까지 파일을 캐시 할 HTTP 헤더

다음은 요청을 처리하는 방법입니다 :

@ResponseBody 
@GetMapping(value = "/file/{f:.*}") 
public FileSystemResource getFile(@PathVariable("f") String fileName, HttpServletResponse response) { 

    File file = new File("/folder/" + fileName); 

    response.setHeader("Cache-Control", CacheControl.maxAge(7, TimeUnit.DAYS).cachePrivate().getHeaderValue()); 
    response.setDateHeader("Last-Modified", file.lastModified()); 
    response.setHeader("ETag", "" + file.lastModified()); 

    return new FileSystemResource(file); 
} 

가 마지막 요청 이후 파일 시스템에 수정 된 경우를 제외하고, 영원히 파일을 캐시해야 브라우저.

Cache-ControlExpires을 어떻게 설정해야할지 모르겠다.

어떻게 설정하고 원하는 동작을 얻으려면 어떤 헤더를 추가해야합니까? 기본적으로 다음과 같은 헤더를 추가 나는 또한 Spring Security를 사용

참고 :

Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Expires:0 
Pragma:no-cache 

그 헤더가 "정상"페이지에 대한 좋은,하지만 난이 '/file/**을 처리 위에 표시 방법 그들을 돼요.

답변

1

일반적으로 ETag 헤더가 사용됩니다. ETag를에 공식 봄 문서에서 :

의 ETag (엔터티 태그)를 지정된 URL의 내용의 변화를 결정하는 데 사용되는 HTTP/1.1 호환 웹 서버에 의해 반환 된 HTTP 응답 헤더입니다.

ETag와 함께 사용되는 요청 헤더는 "If-None-Match""If-Match"입니다. 이것들은 요청을 조건부로 만드는 데 사용됩니다.

편집 : 스프링 보안을 사용하려면 해당 헤더 설정을 비활성화해야합니다. 구성 방법에서 추가 할 수 있습니다. httpSecurity.headers().cacheControl().disable();