웹 cache 메커니즘 (cache - control)

캐 치가 뭐야?
cache 는 캐 시 여야 합 니 다. 캐 시 는 우리 사이트 의 응용 성능 을 향상 시 킬 수 있 습 니 다. 이것 은 의심 할 여지 가 없습니다.그렇다면 HTTP 프로 토 콜 은 어떻게 CACHE 메커니즘 을 지원 합 니까?
우리 함께 탐색 해 보 자.
 
우선 http 프로 토 콜 헤더 의 원문 w3c cache
 
이 설명 은 대략 다음 과 같다.
클 라 이언 트 가 http 요청 에 접근 할 때 클 라 이언 트 캐 시가 이 entry 가 있 는 지 확인 하고 있 으 면 사용 가능성 (예 를 들 어 만 료 시간, id 등) 을 확인 하고 유효 하 다 면 클 라 이언 트 에 게 직접 돌아 갑 니 다.cache 에 이 entry 가 없 으 면 서버 에 요청 합 니 다.
 
HTTP 프로 토 콜 은 어떻게 이 절 차 를 보증 합 니까?
cache - control 이라는 http header 를 볼 수 있 습 니 다. cache - control 은 http / 1.1 의 내용 으로 http / 1.0 의 pragma 를 호 환 합 니 다.
 
cache - control 에서 자주 사용 하 는 속성 은
 max - age 와 no - cache
구체 적 인 표기 법 은 다음 과 같다.
 <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache" />

상기 코드 의 뜻 은:
첫 번 째 줄: 영원히 만 료 됩 니 다. 요청 할 때마다 서버 와 상호작용 을 해 야 합 니 다. max - age 의 단 위 는 초 입 니 다.
두 번 째 줄: 클 라 이언 트 가 cache 를 하지 않 습 니 다.
 PS max - age 의 우선 순 위 는 http 의 expires 헤드 보다 높 은 우선 순위 입 니 다. 즉, max - age 를 설정 하면 expires 헤드 의 만 료 시간 을 덮어 씁 니 다.서버 cache - control 과 expires 가 설정 되 어 있 지 않 으 면 http 프로 토 콜 클 라 이언 트 에 따라 만 료 시간 을 자동 으로 계산 합 니 다.
 
클 라 이언 트 가 http 요청 을 할 때 클 라 이언 트 가 이 캐 시가 존재 하고 유효 하 다 는 것 을 확인 하면 캐 시 내용 을 직접 되 돌려 줍 니 다.그렇다면 캐 시가 유효한 지 어떻게 판정 합 니까?
검사 규칙 은 매우 많 을 수 있 습 니 다. 기 존 에 흔히 볼 수 있 는 검사 필드 는?
  • last-modified
  • ETag(entity tag)
  • IF-MODIFIED-SINCE
  • IF-UNMODIFIED-SINCE

  • 검 사 는 강 한 검사 와 약 한 검사 로 나 뉜 다.
    강 한 검사 란 실체 (요청 한 대상) 가 바 뀌 었 을 때 관련 검사 기 도 달라 지 는 것 을 말한다.그렇지 않 으 면 약 한 검사 라 고 합 니 다.
     
    우 리 는 Etag 를 예 로 들 자.
    클 라 이언 트 가 요청 을 보 내 면 요청 헤더 에 ETag = 1 필드 가 있 습 니 다. 서버 가 이 요청 을 받 았 을 때 이 ETag 를 1 로 분석 하고 서버 와 로 컬 요청 실체의 ETag 를 비교 합 니 다. 같 으 면 304 로 돌아 갑 니 다. 그렇지 않 으 면 새로운 실체 로 돌아 갑 니 다.
    이것 이 바로 전체 검사 과정 이다.
     
    이 원칙 을 알 게 되면 우 리 는 응용 을 할 때 다음 과 같은 두 가 지 를 주의해 야 한다.
  • cache 는 cache 할 수 있 는 모든 자원 을 가지 고 있 으 며, cache 할 수 있 는 만큼 cache 할 수 있 습 니까?
  • cache html
  • 그러면 또 다른 문제 가 발생 할 수 있 습 니 다. 요청 할 때 클 라 이언 트 는 실시 간 으로 업 데 이 트 를 받 을 수 없습니다.
     
    그래서 나의 해결 방안 은 다음 과 같다.
  • 모든 정적 자원 (html 자원 과 동적 자원 제외) 에 cache 를 추가 하고 버 전 번 호 를 추가 합 니 다. 웹 서버 (apche | nginx) 는 cache 만 료 시간 을 영구적 으로 설정 합 니 다.
  • 모든 html 불 cache 
  • <script type="text/javascript" src="a.js?v=1" ></script>
    

    좋은 웹페이지 즐겨찾기