5 분간 시리즈 읽 기: HTTP 캐 시 메커니즘 상세 설명

5830 단어 python
HTTP 캐 시 란 무엇 인가
HTTP 캐 시 는 HTTP 성능 최적화 에서 간단 하고 효율 적 인 최적화 방식 이 라 고 할 수 있 습 니 다. 캐 시 는 자원 복사 본 을 저장 하고 다음 요청 시 이 복사 본 을 직접 사용 하 는 기술 입 니 다. 웹 캐 시가 요청 한 자원 이 저장 되 어 있 는 것 을 발견 하면 요청 을 차단 하고 이 자원 의 복사 본 을 되 돌려 주 며 원본 서버 에서 다시 다운로드 하지 않 습 니 다.우수한 캐 시 정책 은 웹 페이지 요청 자원 의 거 리 를 단축 시 키 고 지연 을 줄 이 며 네트워크 트 래 픽 을 절약 할 수 있 으 며 캐 시 파일 을 중복 적 으로 이용 하여 네트워크 부 하 를 낮 추고 클 라 이언 트 응답 을 높 일 수 있 습 니 다.따라서 HTTP 캐 시 를 활용 하 는 것 을 배 우 는 것 이 필요 합 니 다. 여기 서 HTTP 캐 시 체 제 를 체계적으로 소개 하 겠 습 니 다. 여러분 이 HTTP 캐 시 를 정확하게 이해 하 는 데 도움 이 되 기 를 바 랍 니 다.
캐 시 정책
HTTP 의 서로 다른 캐 시 정책 을 설명 하기 전에 사용자 가 새로 고침 / 접근 행 위 를 하 는 수단 을 세 가지 로 나 누 어야 합 니 다.
  • URI 입력 란 에 입력 하고 돌아 가기 / 책 갈피 로 접근
  • F5 / 도구 모음 에서 새로 고침 버튼 / 오른쪽 메뉴 를 클릭 하여 다시 불 러 오기
  • Ctrl + F5 (HTTP 캐 시 전혀 사용 하지 않 음)
  • 서로 다른 리 셋 수단 은 브 라 우 저 로 하여 금 서로 다른 캐 시 정책 을 사용 하 게 할 수 있 습 니 다. 아래 에서 분석 하 겠 습 니 다.
    HTTP 캐 시 는 메시지 헤더 에 있 는 Header 정 보 를 요청 하고 응답 함으로써 캐 시 를 제어 하 는 정책 입 니 다.응답 헤더 의 관련 필드 는 Expires, Cache - Control, Last - Modified, Etag 입 니 다.
    HTTP 캐 시 유형 이 매우 많 습 니 다. 서버 에 다시 요청 해 야 하 는 지 여부 에 따라 두 가 지 를 분류 합 니 다. 캐 시 강제 와 대비 캐 시 는 브 라 우 저 에 캐 시 데이터베이스 가 로 컬 캐 시 에 사용 된다 고 가정 하고 브 라 우 저 요청 자원 의 상황 을 먼저 봅 니 다.
    강제 캐 시: 브 라 우 저가 데 이 터 를 캐 시 한 상태 에서 데 이 터 를 요청 하 는 프로 세 스 는 다음 과 같 습 니 다.
    강제 캐 시
    프로 세 스 그림 에서 볼 수 있 듯 이 캐 시 를 강제 합 니 다. 캐 시 데이터 가 효력 을 잃 지 않 은 상태 에서 캐 시 데 이 터 를 직접 사용 할 수 있 습 니 다. 서버 에 요청 할 필요 가 없습니다. 그러면 브 라 우 저 는 캐 시 데이터 가 효력 을 잃 었 는 지 여 부 를 어떻게 판단 합 니까?강제 캐 시 에 있어 서 응답 헤더 에는 실효 규칙 (Expires / Cache - Control) 을 표시 하 는 두 필드 가 있 습 니 다.
  • Expires:

  • Expires 는 HTTP 1.0 의 산물 입 니 다. 현재 기본 브 라 우 저 는 기본적으로 HTTP 1.1 을 사용 하기 때문에 그 역할 은 기본적으로 무시 합 니 다.하지만 많은 사이트 들 이 그것 을 호 환 했다.이 값 은 서버 에서 돌아 오 는 만 료 시간 입 니 다. 즉, 다음 요청 시 요청 시간 이 서버 에서 돌아 오 는 만 료 시간 보다 적 고 캐 시 데 이 터 를 직접 사용 합 니 다.그러나 문 제 는 만 료 시간 이 서버 에서 생 성 된 것 으로 클 라 이언 트 시간 이 서버 시간 과 일치 하지 않 으 면 캐 시 명중 의 오 차 를 초래 할 수 있다 는 것 이다.HTTP 1.1 버 전에 서 Expires 는 Cache - Control 로 대 체 됩 니 다.
  • Cache-Control:

  • Cache - Control 은 가장 중요 한 규칙 이다.흔히 볼 수 있 는 값 은 private, public, no - cache, max - age, no - store 이 고 기본 값 은 private 입 니 다.
    (1) max - age: 자원 (representations) 이 얼마나 캐 시 될 수 있 는 지, 단 위 는 초 입 니 다.
    (2) s - maxage: max - age 와 같 지만 프 록 시 캐 시 에 만 적 용 됩 니 다.
    (3) Public: 지시 응답 은 모든 캐 시 에 캐 시 될 수 있 습 니 다.
    (4) private: 프 록 시 캐 시 대신 개인 사용자 만 사용 할 수 있 습 니 다.
    (5) no - cache: 클 라 이언 트 가 서버 에 직접 요청 을 하도록 강제 합 니 다. 즉, 매번 요청 할 때마다 서버 에 보 내야 합 니 다.서버 가 요청 을 받 은 후에 자원 의 변경 여 부 를 판단 하고 새로운 내용 을 되 돌려 줍 니 다. 그렇지 않 으 면 304 로 돌아 가 변경 되 지 않 았 습 니 다.이것 은 응답 이 캐 시 되 지 않 는 것 으로 오해 하기 쉽다.실제로 Cache - Control: no - cache 는 캐 시 됩 니 다. 클 라 이언 트 (브 라 우 저) 에 응답 데 이 터 를 제공 할 때마다 캐 시 는 서버 에 캐 시 응답 의 유효성 을 평가 해 야 합 니 다.
    (6) no - store: 모든 캐 시 를 금지 합 니 다.
    예 를 들 어 자원 응답 헤드 는:
    cache-control: public, max-age=31536000

    그러면 이 자원 은 3153600 초 (365 일) 캐 시 되 고 365 일 안에 이 데 이 터 를 다시 요청 하면 캐 시 데이터베이스 에 있 는 데 이 터 를 직접 가 져 와 직접 사용 합 니 다.그러면 자원 을 다시 방문 해 보 겠 습 니 다. 다음 과 같은 응답 이 있 을 것 입 니 다.
    HTTP 상태 코드 가 200, Size 라 는 필드 를 볼 수 있 습 니 다. disk cache 는 HTTP 응답 메시지 크기 가 0 이라는 것 을 의미 합 니 다. 브 라 우 저 는 강제 캐 시 를 갔 고 브 라 우 저 와 대화 하지 않 았 습 니 다.위 에서 말 했 듯 이, 서로 다른 접근 / 새로 고침 수단 은 브 라 우 저 로 하여 금 서로 다른 캐 시 정책 을 사용 하 게 할 것 입 니 다. 브 라 우 저 를 강제 캐 시 로 보 내 려 면 요청 방식 에 대한 요구 가 있 습 니 다. URI 입력 란 에 입력 하고 차 로 돌아 가 거나 책 갈 피 를 통 해 접근 하 십시오.
    대비 캐 시:
    브 라 우 저가 데 이 터 를 캐 시 한 상태 에서 대비 캐 시 를 사용 하여 데 이 터 를 요청 하 는 절 차 는 다음 과 같 습 니 다.
    캐 시 대비 프로 세 스 를 바탕 으로 캐 시 를 사용 하 든 안 하 든 서버 에 요청 을 보 내야 하 는데 캐 시 로 무엇 을 하 느 냐 고 물 을 수도 있 습 니 다.이 문 제 를 우리 지금 토론 합 시다.캐 시 를 비교 하 는 것 은 말 그대로 캐 시 를 사용 할 수 있 는 지 여 부 를 비교 판단 해 야 한다.브 라 우 저가 처음으로 데 이 터 를 요청 할 때 서버 는 캐 시 표 지 를 데이터 와 함께 브 라 우 저 에 되 돌려 주 고 브 라 우 저 는 두 사람 을 캐 시 데이터베이스 에 백업 합 니 다.브 라 우 저 가 데 이 터 를 다시 요청 할 때 브 라 우 저 는 백업 한 캐 시 표 지 를 서버 에 보 냅 니 다. 서버 는 캐 시 표지 에 따라 판단 하고 성공 을 판단 한 후 304 상태 코드 를 되 돌려 클 라 이언 트 에 게 성공 적 이 라 고 알 리 며 캐 시 데 이 터 를 사용 할 수 있 습 니 다.첫 방문:
    두 번 째 방문:
    캐 시 대비, 응답 헤더 에 규칙 을 표시 하 는 두 필드 가 있 습 니 다.
  • Last-Modified / If-Modified-Since

  • 서버 가 요청 에 응답 할 때 Last-Modified HTTP 헤드 를 통 해 브 라 우 저 자원 의 마지막 수정 시간 을 알려 줍 니 다. 브 라 우 저 로 컬 에서 자원 캐 시 를 한 다음 요청 할 때 HTTP 헤드 If-Modified-Since 를 가 져 옵 니 다. 이 값 은 서버 가 지난번 에 준 Last-Modified 시간 입 니 다. 서버 는 브 라 우 저 를 가지 고 자원 의 현재 마지막 수정 시간 보다 전 달 됩 니 다.If-Modified-Since 보다 크 면 자원 이 수정 되 었 음 을 설명 합 니 다. 브 라 우 저 는 캐 시 를 다시 사용 할 수 없습니다. 서버 는 완전한 자원 브 라 우 저 를 다시 만 듭 니 다. 그렇지 않 으 면 브 라 우 저 는 캐 시 를 계속 사용 하고 304 상태 코드 를 되 돌려 줄 수 있 습 니 다.
  • Etag / If - None - Match (최 우선 순위 가 Last - Modified / If - Modified - Since 보다 높 음)
  • 서버 가 요청 에 응답 할 때 Etag HTTP 머리 를 통 해 현재 자원 이 서버 에 있 는 유일한 표지 (생 성 규칙 은 서버 에 의 해 결정) 를 브 라 우 저 에 게 알려 줍 니 다. 브 라 우 저가 다시 요청 할 때 머리 If-None-Match 를 가 져 옵 니 다. 이 값 은 서버 가 지난번 에 준 Etag 값 입 니 다. 서버 는 자원 의 현재 Etag 가 If - None - Match 와 일치 하 는 지 비교 합 니 다.일치 하지 않 으 면 자원 이 수정 되 었 음 을 설명 합 니 다. 브 라 우 저 는 캐 시 를 더 이상 사용 할 수 없습니다. 그렇지 않 으 면 브 라 우 저 는 캐 시 를 계속 사용 하고 304 상태 코드 를 되 돌려 줍 니 다.
    주의해 야 할 것 은 Etag 의 검사 우선 순위 가 Last - Modified 보다 높다 는 것 입 니 다. 예 를 들 어 첫 번 째 요청, 서버 응답 헤더 가 포함 되 어 있 습 니 다.
    두 번 째 요청, 브 라 우 저의 요청 헤더
    총결산
    HTTP 캐 시 에 있 는 전체 프로 세 스 를 다시 봅 시다.
  • HTTP 캐 시 는 주로 강제 캐 시 와 대비 캐 시
  • 로 나 뉜 다.
  • 캐 시 를 강제 하 는 HTTP 관련 헤드 Cache - Control, Exipres (HTTP 1.0), 브 라 우 저 는 로 컬 캐 시 를 직접 읽 고 서버 와 상호작용 하지 않 으 며 상태 코드 200.
  • 캐 시 를 대비 한 HTTP 관련 헤더 Last - Modified / If - Modified - Since, Etag / If - None - Match (Last - Modified / If - Modified - Since 보다 우선 순위 가 높 음) 요청 할 때마다 서버 에 자원 업데이트 여 부 를 판단 하여 브 라 우 저가 캐 시 를 사용 할 지 여 부 를 결정 하고, 만약 그렇다면 304 로 되 돌아 가 며, 그렇지 않 으 면 다시 완전 하 게 응답 합 니 다.

  • 나 에 대해 서
    만약 문장 이 당신 에 게 수확 이 있다 면, 소장 하고 전송 할 수 있 습 니 다. 이것 은 나 에 게 큰 격려 가 될 것 입 니 다!또한 제 공중전화 [우리 부자 형] (coder 2025) 를 주목 할 수 있 습 니 다. 저 는 오리지널 알고리즘, 컴퓨터 기초 문장 을 지속 적 으로 출력 하 겠 습 니 다!

    좋은 웹페이지 즐겨찾기