1. 최초 요청 시 HTTP Request와 Response
Client's request
Client ------------------------------> Server
Request URL: http://i1.daumcdn.net/cfs.tistory/static/images/logo.gif
Server's response
Client <------------------------------ Server
Header에 "Last-Modified"를 설정하여 응답한다. (아래의 그림 참조)
2. 재 요청 시 HTTP Request Response
Client's request
Client ------------------------------> Server
Request URL: http://i1.daumcdn.net/cfs.tistory/static/images/logo.gif
최초 응답 시 받은 "Last-Modified"를 참조하여 Header에 "If-Modified-Since"를 설정하여 요청한다.
(Browser가 알아서 설정)
Server's response
Client <------------------------------ Server
Server는 "If-Modified-Since" 값과 비교하여 변경 사항이 없으면 HTTP Status Code 304로 응답한다.
(아래의 그림 참조)
3. Code Snipet
public void downloadResource(@PathVariable String resourceName,
HttpServletRequest request,
HttpServletResponse response) {
WebResource webResource = ResourceService.getResource(resourceName);
long lastModified = webResource.getLastModified();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(lastModified);
calendar.set(Calendar.MILLISECOND, 0);
lastModified = calendar.getTimeInMillis();
long ifModifiedSince = request.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE);
if (ifModifiedSince != -1 && ifModifiedSince >= lastModified) {
response.setStatus(HttpStatus.SC_NOT_MODIFIED);
return;
}
response.setDateHeader(HttpHeaders.LAST_MODIFIED, lastModified);
...
}
