오늘은 웹 캐시 저장을 방지하는 방법을 공유합니다.
웹 캐시는 사용자(client)가 웹 사이트(server)에 접속 할 때, 서버 지연을 줄이기 위해 정적 컨텐츠(image, js, css) 등을 임시 저장하는 정보기술 입니다.
캐시를 이용하면 저장된 웹 사본의 정보를 불러옴으로써 더 빠른 열람이 가능하며 트래픽 낭비를 해소할 수 있습니다.
※ 캐싱의 문제점
- 빠르게 변화되는 사이트에 비해 사용자는 이미 하드디스크에 캐시된 버전으로 보일 수 있으므로
포맷이 안 맞거나 올바르지 않은 이미지로 보여질 수 있습니다.
- 웹 서비스 내 주요 정보 및 민감 정보를 다루는 페이지가 존재할 경우 해당 페이지의 캐싱 방지 설정이 따로 없다면
사용자 세션이 만료된 이후에도 브라우저 내 뒤로가기 등을 통해 별도의 인증 과정 없이 주요 페이지에 접근이 가능해집니다.
이로 인해 민감한 정보들이 악의적인 사용자들에게 노출될 가능성이 있기 때문에 캐싱 방지를 하는 것이 좋습니다.
각 언어 별 no-cache 설정 방법은 문법 형태의 차이만 약간 있을 뿐 설정 방법은 동일합니다.
제목 |
설명 |
Cache-Control |
HTTP/1.1 스펙 에서 정의, no-cache, no-store 등의 설정 |
Pragma |
Cache-Control이 생기기 전에 HTTP/1.0 no-cache 설정을 위해 사용되는 헤더. HTTP/1.0 를 사용하는 클라이언트를 위해 사용 |
Expires |
캐시 만료 시간 지정 '-1' 설정 시, 캐시된 페이지를 즉시 만료 |
HTML, ASP, JSP, PHP 웹 캐시 저장 방지
HTML인 경우
<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Cache-Control" content="No-Cache">
<META http-equiv="Expires" content="-1">
ASP인 경우
<%
Response.Expires = 0
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "Cache-Control","no-cache,must-revalidate"
%>
JSP인 경우
<%
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");
%>
PHP인 경우
<?
header("Pragma: no-cache");
header("Cache-Control: no-cache,must-revalidate");
?>