웹 캐시 컨트롤, web cache

웹 캐시 컨트롤

  • 작성자
    • 공대여자

내용

  • Pragma
    • HTTP 1.0 스펙(HTTP 1.1에서는 무시된다.)
    • Pragma: no-cache
      • 캐시 안한다.
  • Cache-Control ( http://www.ietf.org/rfc/rfc2616.txt )
    • HTTP 1.1 스펙
    • Cache-Control: public
      • 캐시한다.
      • 공유캐시(Shared Caches)
    • Cache-Control: private
      • 요청자에게만 유효한 캐시로 표현한다.(캐시는 다른 사람에게는 공유되지 않는다.)
        다른 사용자가 똑같은 요청을 해도 웹에서는 캐시된 내용이 아닌 새로운(또는 다른 캐시된) 내용을 보여준다.
      • 비공유(사적인)캐시(Non-Shared Caches)
    • Cache-Control: private, community="UCI"
      • UCI라는 멤버로 요청한 사람들 끼리만 캐시가 공유된다.
    • Cache-Control: no-cache
      • 캐시 안한다.
    • Cache-Control: no-store
      • 캐시 안한다. 내용을 (백업 테이프 등) 저장하지 않는다.(임시폴더 등에도 남지 않아야한다.)
      • 하지만 따로 저장하기 등으로 저장하는 건 막을 수 없다.
    • Cache-Control: max-age=sec
      • 지정한 시간보다 오래된 캐시는 보내지 않는다.
      • 0으로 지정하면 항상 새로 요청한다.
      • 클라이언트와 서버간의 시간차이가 있어도 문제없이 작동한다.
      • Expires 보다 우선시 된다.
    • Cache-Control: max-stale[=sec]
      • 지정된 시간보다 오래되지 않은 캐시를 보낸다.
      • 시간을 지정하지 않으면 만료되지 않은 캐시를 보낸다.
      • request 해더용
    • Cache-Control: min-fresh=sec
      • 지정된 시간 뒤에 변경된 캐시만을 보낸다.
      • 즉, 지정된 시간까지는 생성된 캐시를 사용한다.
    • Cache-Control: only-if-cached
      • 캐시가 있다면 무조건 캐시를 사용한다.
      • request 해더용
    • Cache-Control: pre-check=sec
      • IE5 에서 확장된 내용(다른 브라우저나 이전 버전의 IE에서는 무시될 수 있음)
      • 지정된 시간 이후에 문서가 요청될 때 변경되었는지를 미리 체크 후 문서를 보냄
    • Cache-Control: post-check=sec
      • IE5 에서 확장된 내용(다른 브라우저나 이전 버전의 IE에서는 무시될 수 있음)
      • 지정된 시간 이후에 문서가 요청될 때 문서를 먼저 받고 문서가 변경되었는지를 체크
        맨 처음은 오래된 문서가 올 수 있지만, 그 후로는 새로운 문서가 받아짐
  • Expires
    • Expires: Thu, 01 Dec 1994 16:00:00 GMT
    • 지정된 시간까지는 이 문서를 사용하라.
    • 즉, 지전된 시간이 지나면 이 문서는 새로 요청하게 된다.
    • 서버와 클라이언트가 시간이 다르면 문제가 될 수 있다.
    • PHP에서
      • header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");
    • Cache-Control: max-age=sec 와 중첩되면 max-age가 우선시된다.
  • ETag
    • Etag: "문자열"
      • ETag: xyzxyz
    • Response 해더용
    • 서버,URI,반환내용이 변경되지 않았다면 문자열은 한상 같은 문자열이다.
      문자열이 같다면 캐시된 내용이 사용된다.
    • L4로 묶여있을 경우 서버가 다르기 때문에 같은 URI,반환 내용이라도 항상 문자열이 다를 수 있다.
      여러서버를 묶어서 사용하는 경우 사용하면 손해!
      • 여러서버를 동시 사용시 Etag 생성 규칙을 손봐야한다. 규칙에 파일수정시간등은 제외하는 것이 좋을것이다.
  • Last-Modified
    • Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
    • 이 문서는 언제 수정되었다는 걸 표시한다.
      원본서버의 파일 시스템에서의 시간이 사용됨.
  • Retry-After
    • response 해더용
    • Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
    • Retry-After: 120
    • 503 (Service Unavailable)시 재시도 가능 시간 또는 재시도 까지 걸릴 시간을 표시

예제(PHP기준)

  • 항상 새로받기
    • header('Pragma: no-cache');
      header('Expires: Thu, 01 Jan 1970 16:00:00 GMT');
      header('Cache-Control: max-age = 0, no-cache');
  • 캐시 1시간 유지하기
    • header('Pragma: public');
      header("Expires: ".gmdate("D, d M Y H:i:s", time()+3600)." GMT");
      header('Cache-Control: public, max-age = 3600');
    • 캐시 1시간 유지하기 + 비공유캐시
      • header('Pragma: public');
        header("Expires: ".gmdate("D, d M Y H:i:s", time()+3600)." GMT");
        header('Cache-Control: max-age = 3600, private');
  • 정적인 페이지(이미지)의 경우 (30일 캐시)
    • header('Pragma: public');
      header("Expires: ".gmdate("D, d M Y H:i:s", time()+2592000)." GMT");
      header('Cache-Control: public, max-age = 2592000');
  • 전부 response header 쪽에 적용되는 코드임!
댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1