sitelink1 | https://blog.naver.com/semi7623/100005637477 |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
extra_vars5 | |
extra_vars6 |
Pragma와 Cache-Control은 브라우저나 프록시 서버로 하여금 요청시에 캐시된 문서를 사용하지 말고 매번 서버로부터 새로운 문서를 다시 전송받아 사용하도록 알리는 헤더이다.
HTTP1.0 에서는 Pragma 헤더에 'no-cache'를, HTTP1.1 에서는 Cache-Control 헤더에 'no-cache'를 각각 지정함으로써 가능하다.
브라우저나 프록시 서버가 지원하는 HTTP 프로토콜 버전을 알 수 없는 경우 응답 헤더에 Cache-Control과 Pragma 헤더를 'no-cache'로 함께 지정하여 주거나 HttpServletRequest 인터페이스 객체(내장 객체 request)의 getProtocol() 메소드를 사용하여 요청한 클라이언트의 HTTP 프로토콜 버전을 확인한 후 해당 버전에 맞게 헤더를 지정해줄 수 있다.
캐쉬 방지팁
<%
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
if(request.getProtocol().equals("HTTP/1.1")) {
response.setHeader("Cache-Control", "no-cache");
}
%>
요약
1. Request header에 Pragma와 Cache-Control 을 no-cache로 설정하면 브라우저나 프록시 서버의 캐시를 이용하지 않게 한다
-> 서버에 request 가 요청되지만 서버에서 클라이언트의 자원이 이전과 동일한지에 대한 검사는 별도로 이뤄진다(etag, If-Match, If-Modified-Since, If-None-Match)
2. HTTP1.0 에서는 Pragma 헤더에 'no-cache'를, HTTP1.1 에서는 Cache-Control 헤더에 'no-cache'를 각각 지정한다
3. 브라우저나 프록시 서버가 지원하는 HTTP 프로토콜 버전을 알 수 없는 경우 다음과 같은 두가지 방법이 있다
-> Request에 Cache-Control과 Pragma 헤더를 'no-cache'로 둘다 설정하는 방법
-> CGI프로그램에서 HttpServletRequest 인터페이스 객체(내장 객체 request)의 getProtocol() 메소드를 사용하여
요청한 클라이언트의 HTTP 프로토콜 버전을 확인한 후 해당 버전에 맞게 헤더를 지정하는 방법