웹 캐시 컨트롤, 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}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
공대여자
공대여자