2017-10-23 18 views
0

REST practice을 읽고 캐시에서 웹 스케일 아웃 기본에 대해 더 잘 이해하십시오. 하지만 스프링 부트 프로젝트에 http 캐시 컨트롤을 추가하려고하면 캐시 컨트롤에 특별한 것이 없다는 것을 발견했습니다. 내가 가진 유일한 리소스는 ResponseEntity : javadoc입니다. ETag에서 가장 유용한 기사는 http://www.baeldung.com/etags-for-rest-with-spring입니다.왜 Spring MVC에서 http 캐시 제어가 제대로 지원되지 않습니까?

이렇게하면 혼란 스럽습니다 ... 캐시 컨트롤이 정말 좋은 이유는 Etag 생성 및 캐시 제어 리소스를 거의 지원하지 않는 이유입니다. 아니면 지금 가장 좋은 방법이 아닐까요?

는 지금 내 구현은 다음과 같습니다

@RestController 
public class Api { 

    @GetMapping("/with-cache") 
    public ResponseEntity cache() throws InterruptedException { 
     HttpHeaders httpHeaders = new HttpHeaders(); 
     httpHeaders.setCacheControl("max-age=3600"); 
     httpHeaders.setETag("\"3Rstthw\""); 
     Thread.sleep(1000); 
     return new ResponseEntity<>("Hello", httpHeaders, HttpStatus.OK); 
    } 
} 

은 매우 우아하지 보인다. 희망이 어떤 사람이 대답을 줄 수 있습니다.

+1

"이유"가 중요합니까? 참고로 Q & A 사이트이며 토론 게시판이 아닙니다. –

+0

"더 나은"지원은 무엇이라고 생각하십니까? --- etags는 "생성되지"않습니다. 문제의 리소스 버전 *을 나타냅니다. 예 : 이것은 [Wikipedia] (https://en.wikipedia.org/wiki/HTTP_ETag)가 다음과 같이 구는 방법입니다. * ETag는 URL에서 발견 된 리소스의 특정 버전에 웹 서버에 의해 할당 된 불투명 식별자입니다. *. 해당 URL의 리소스 표현이 변경되면, 새롭고 다른 ETag가 할당됩니다. * Spring은 응답의 페이로드가 어디서 왔는지 알지 못하기 때문에 Spring은 그 페이로드의 버전을 어떻게 알 수 있습니까? – Andreas

답변

1

annotations were considered for response headers하지만 이에 대해 결정 했으므로 수동으로 어떻게 든 처리해야합니다 (필자의 코드에서는 그렇지 않을 수도 있음).

가장 큰 이유는 응답이 가능한 리디렉션 등으로 복잡하기 때문에 주석이 적합하지 않기 때문입니다. 마지막 코멘트

여기에 가져온 특정 사용 케이스에서

견적은 캐시 컨트롤입니다. 4.1에서는 ResponseEntity 빌더를 추가했으며 4.2에서는 ResponseEntity 빌더 과 함께 작동하는 CacheControl 빌더를 추가하여 프로그래밍 방식으로 매우 편리하게 만들었으며 eTags 및 lastModified ( 자동 체크인 + 304). 또한 CrossCutter 요구 사항이므로 @CacheControl 헤더에 대해 특별히 고려한 후 을 결정했습니다. 대신 WebContentInterceptor를 사용하여 URL 패턴 당 캐시 설정을 구성 할 수 있으며 CacheControl 빌더를 으로 허용합니다.