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); ... }