본문 바로가기
WEB/APACHE

10. Cache-Control

by coldplayer83 2023. 6. 26.
728x90
 
apache를 이용한 page cache 방지
 
사용자가 많이 몰려 이미지 등의 다운로드로 서버 부하가 우려될 경우 잦은 변경이 없는 파일들에 대해서는 캐시할 수 있도록 설정할 수 있다.
하지만 홈페이지를 제작중이거나 수정 작업을 하다보면 리소스(그림파일, 웹문서 등 정적 파일(css, js, html)들이 변경되었는데도 클라이언트 브라우저에서 이를 감지하지 못하는 경우가 있다.
특히 페이지가 .html이라면 캐시를 막는 meta tag를 사용해도 구형 브라우저에서는 이전 페이지를 캐시하는 경우가 많다.
이 경우 사용하는 방법은 아래와 같다.
 
1. 확장자별 no-caching 설정 방법
<filesMatch "\.(html|htm|js|css)$">
	FileETag None
        <ifModule mod_headers.c>
            Header unset ETag
            Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
            Header set Pragma "no-cache"
            Header set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
        </ifModule>
</filesMatch>
 
2. 디렉토리별 no-caching 설정 방법
cont/httpd.conf의 해당 Directory 태그에 설정
<Directory /some/real/path/to/tmp>
    Header Set Pragma "no-cache"
    Header Set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
    Header Set Cache-Control "max-age=0, no-store, no-cache, must-revalidate"
    Header Unset ETag
    FileETag None
</Directory>
 

 
Pragma : HTTP/1.0 에서의 클라이언트 응답 캐싱 방지
 
Cache-Control : HTTP/1.1 에서의 클라이언트 응답 캐싱 방지
    no-cache : 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용
    no-store : 데이터에 민감한 정보가 있으므로 저장하면 안됨(메모리에서 사용하고 최대한 빨리 삭제).캐시저장x.
    must-revalidate : 캐시 만료후 최초 조회시 원 서버에 검증해야 함. 
    원서버 접근 실패시 반드시 오류가 발생해야 함.(504 Gateway timeout).
    must-revalidate는 캐시 유효 시간이라면 캐시를 사용함.
 
ETag : 브라우저가 조건부 요청을 수행하고 캐시 유효성 검사를 효율적으로 수행할 수 있도록 하는 서버 응답 헤더.
코드가 유출될 경우 보안 위험을 초래하고 웹사이트에 대한 캐시 중독 공격이 발생할 수 있기 때문에 웹사이트에 ETag가 필요하지 않은 경우 비활성화하는 것이 좋다.
 
 
 
 
 
 
 
 
 
 
 

 

'WEB > APACHE' 카테고리의 다른 글

12. Apache + Weblogic 연동  (0) 2023.06.26
11. Apache + Tomcat 연동  (0) 2023.06.26
9. 크로스 도메인(Cross Domain)  (0) 2023.06.26
8. HTTP 상태 코드  (0) 2023.06.26
7. 특정 IP 허용/차단  (0) 2023.06.26