=======================
=======================
=======================
<meta http-equiv="Expires" content=0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<html>
<!-- code ....-->
</html>
HTML 제일 윗부분에 위와같이 설정을 해주자.
=======================
=======================
=======================
html no-cache
<META HTTP-EQUIV='Cache-Control' CONTENT='no-cache'>
<META HTTP-EQUIV='Pragma' CONTENT='no-cache'>
<META http-equiv="Expires" content="-1">
asp no-cache
<%
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>
jsp no-cache
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
if (request.getProtocol().equals("HTTP/1.1"))
response.setHeader("Cache-Control", "no-cache");
%>
=======================
=======================
=======================
출처: https://www.lesstif.com/pages/viewpage.action?pageId=20775788
로그인용 사용자 이름, 비밀번호 및 기타 민감한 정보들을 보호하기 위해 SSL 을 로그인 페이지나 회원 정보 페이지등은 SSL로 암호화하는 경우가 많다.
SSL 을 사용해서 민감한 정보들을 보호한다고 해도 브라우저에 이 정보가 캐싱되면 문제가 발생할 수 있다. (PC방이나 공공장소에서 사용후 캐슁으로 인해 개인 정보가 남는등..)
다음 http 헤더를 사용하면 브라우저 캐싱을 방지할 수 있다. 단 캐싱을 하지 않으면 성능 저하가 발생할 수 있으므로 로그인 페이지등에 제한적으로 사용해야 한다.
PHP
Java Servlet
Trouble Shooting
- 특정 버전의 Internet Explorer 의 경우 no-cache 가 적용된 웹 페이지에서 다운로드를 실패함
Ref
=======================
=======================
=======================
출처: http://mygumi.tistory.com/149
이번 글은 캐시 제어에 관련된 응답 헤더들을 다뤄본다.
"HTTP 완벽 가이드" 책과 stackoverflow의 관련 글들을 참고하여 작성하였다.
Cache-Control: no-cache, no-store, must-revalidate
위와 같은 헤더들을 통해 캐시를 막을 수 있다.
알고 있었다면, 분명 헤더들의 의미 또한 알고 있을 것이다.
그렇다면 왜 굳이 3가지 모두를 명시해줘야하는가? 의미를 알고 있다면, 의미상 no-store 만을 명시해줘도 되지 않는가?
그렇다면 왜 3가지 모두 명시해줘야하는가?에 대한 의문이 들어, 알아본 결과를 통해 글을 작성하게 되었다.
의문을 해결하기에 앞서, 차근차근 살펴보겠다.
캐시는 불필요한 데이터 전송을 줄임으로써, 많은 효과를 주게 된다.
하지만 웹 개발에 있어, 목적 또는 특정 페이지에는 캐시를 필요치 않을 수 있다.
이러한 경우에 우리는 캐시를 막기 위한 설정을 할 수 있다.
설정을 위한 방법을 우선순위대로 나열해보겠다.
- Cache-Control: no-store 헤더를 응답에 첨부할 수 있다.
- Cache-Control: no-cache 헤더를 응답에 첨부할 수 있다.
- Cache-Control: must-revalidate 헤더를 응답에 첨부할 수 있다.
- Cache-Control: max-age 헤더를 응답에 첨부할 수 있다.
- Expires 날짜 헤더를 응답에 첨부할 수 있다.
- 아무 만료 정보도 주지 않고, 캐시가 스스로 체험적인(휴리스틱) 방법으로 결정하게 할 수 있다.
설정 방법들을 하나씩 살펴보자.
no-store
캐시가 그 응답의 사본을 만드는 것을 금지한다.
no-cache
응답은 로컬 캐시 저장소에 저장될 수 있다.
다만 먼저 서버와 재검사를 하지 않고서는 캐시에서 클라이언트로 제공될 수 없다.
Max-Age
신선하다고 간주되었던 문서(만료되지 않은 문서)가 서버로부터 온 이후로 흐른 시간이고, 초로 나타낸다.
ex) Cache-Control: max-age=3600
Expires
초 단위의 시간 대신 실제 만료 날짜를 명시한다.
더 이상 사용하지 않기를 권하는 헤더이다.
ex) Expires: Fri, 05 Jul 2002, 05:00:00 GMT
Must-Revalidate
신선하지 않은 사본을 원 서버와의 최초의 재검사 없이는 제공해서는 안 된다는 것을 의미한다.
* no-cache와 must-revalidate는 재검사를 거쳐 응답을 하는 공통점이 있지만, 재검사 주기가 차이점이 된다.
If a response is cacheable for 10 seconds, then
must-revalidate
kicks in after 10 seconds, whereasno-cache
impliesmust-revalidate
after 0 seconds.
no-cache는 매번 재검사를 하고, must-revalidate는 최초에 재검사를 한다.
응답을 10초 동안 캐시할 수 있다면, 10초 후에 다시 재검사. no-cache 0초라고 생각하면 된다.
응답 헤더들의 의미를 알았으니, 이제는 본인이 언급한 의문에 대해 해결해보자.
캐시를 막기 위한 헤더 설정은 아래와 같은 설정이 정확하다.
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
위와 같은 설정을 하는 이유부터 설명하자면, 모든 클라이언트 및 프록시에서 동작하기 위함이다.
위 설정을 예를 들어 설명해보겠다.
Cache-Control : 클라이언트와 프록시에 대한 HTTP 1.1 스펙에 따라 필요하다.
Pragma : 오래된 클라이언트에 대한 HTTP 1.0 스펙에 따라 필요하다.
Expires : HTTP 1.1에서는 Expires보다 Cache-Control이 우선순위가 높기 때문에, HTTP 1.0 프록시에서만 사용된다.
IE6를 고려하지 않는다면 Cache-Control: no-cache 생략해도 된다.
Cache-Control: no-store, must-revalidate
Pragma: no-cache
Expires: 0
Pragma는 언급했듯이, HTTP 1.0를 위함으로써, HTTP 1.0을 고려하지 않는다면, Pragma를 생략해도 된다.
Cache-Control: no-store, must-revalidate
Expires: 0
Expires는 언급했듯이, HTTP 1.0 프록시를 위함으로써, 고려하지 않는다면 생략해도 된다.
Cache-Control: no-store, must-revalidate
위와 같이 타겟이 되는 클라이언트와 프록시에서 동작을 하기 위해서, 응답 헤더를 설정하게 된다.
현재 네이버의 오픈 API의 응답 헤더는 아래와 같다.
Cache-Control: no-cache, no-store, must-revalidate
자세한 사항은 아래 링크들은 더욱 상세한 정보를 얻을 수 있다.
각 언어를 통해 헤더 설정을 알고 싶었다면, 언어별로 헤더 설정법 또한 알려주니 참고하길 바란다.
혹시나 잘못된 정보가 있다면, 댓글을 통해 알려주길 바란다.
캐시 제어 && 본인이 언급한 의문을 해결하기 위한 자료
http://stackoverflow.com/questions/49547/how-to-control-web-page-caching-across-all-browsers
no-cache, must-revalidate 차이점
http://stackoverflow.com/questions/18148884/difference-between-no-cache-and-must-revalidate
출처: http://mygumi.tistory.com/149 [마이구미의 HelloWorld]
=======================
=======================
=======================
'프로그래밍 관련 > 웹' 카테고리의 다른 글
쿠키정보 보기 (0) | 2020.09.10 |
---|---|
html에서 asp나 그밖의 문법을 사용할 수있도록 IIS설정하기 (0) | 2020.09.10 |
C# asp.net 파일 업로드, 삭제 생성, 수정 관련 (0) | 2011.04.05 |
IIS6에서 asp 업로드 및 다운로드 제한설정 (0) | 2011.03.30 |
ASP DB Connect(연결) 할때 오류나는 경우 확인법 또는 구성 설정법 (0) | 2010.01.14 |
댓글 영역