5 분간 시리즈 읽 기: HTTP 캐 시 메커니즘 상세 설명
5830 단어 python
HTTP 캐 시 는 HTTP 성능 최적화 에서 간단 하고 효율 적 인 최적화 방식 이 라 고 할 수 있 습 니 다. 캐 시 는 자원 복사 본 을 저장 하고 다음 요청 시 이 복사 본 을 직접 사용 하 는 기술 입 니 다. 웹 캐 시가 요청 한 자원 이 저장 되 어 있 는 것 을 발견 하면 요청 을 차단 하고 이 자원 의 복사 본 을 되 돌려 주 며 원본 서버 에서 다시 다운로드 하지 않 습 니 다.우수한 캐 시 정책 은 웹 페이지 요청 자원 의 거 리 를 단축 시 키 고 지연 을 줄 이 며 네트워크 트 래 픽 을 절약 할 수 있 으 며 캐 시 파일 을 중복 적 으로 이용 하여 네트워크 부 하 를 낮 추고 클 라 이언 트 응답 을 높 일 수 있 습 니 다.따라서 HTTP 캐 시 를 활용 하 는 것 을 배 우 는 것 이 필요 합 니 다. 여기 서 HTTP 캐 시 체 제 를 체계적으로 소개 하 겠 습 니 다. 여러분 이 HTTP 캐 시 를 정확하게 이해 하 는 데 도움 이 되 기 를 바 랍 니 다.
캐 시 정책
HTTP 의 서로 다른 캐 시 정책 을 설명 하기 전에 사용자 가 새로 고침 / 접근 행 위 를 하 는 수단 을 세 가지 로 나 누 어야 합 니 다.
HTTP 캐 시 는 메시지 헤더 에 있 는 Header 정 보 를 요청 하고 응답 함으로써 캐 시 를 제어 하 는 정책 입 니 다.응답 헤더 의 관련 필드 는 Expires, Cache - Control, Last - Modified, Etag 입 니 다.
HTTP 캐 시 유형 이 매우 많 습 니 다. 서버 에 다시 요청 해 야 하 는 지 여부 에 따라 두 가 지 를 분류 합 니 다. 캐 시 강제 와 대비 캐 시 는 브 라 우 저 에 캐 시 데이터베이스 가 로 컬 캐 시 에 사용 된다 고 가정 하고 브 라 우 저 요청 자원 의 상황 을 먼저 봅 니 다.
강제 캐 시: 브 라 우 저가 데 이 터 를 캐 시 한 상태 에서 데 이 터 를 요청 하 는 프로 세 스 는 다음 과 같 습 니 다.
강제 캐 시
프로 세 스 그림 에서 볼 수 있 듯 이 캐 시 를 강제 합 니 다. 캐 시 데이터 가 효력 을 잃 지 않 은 상태 에서 캐 시 데 이 터 를 직접 사용 할 수 있 습 니 다. 서버 에 요청 할 필요 가 없습니다. 그러면 브 라 우 저 는 캐 시 데이터 가 효력 을 잃 었 는 지 여 부 를 어떻게 판단 합 니까?강제 캐 시 에 있어 서 응답 헤더 에는 실효 규칙 (Expires / Cache - Control) 을 표시 하 는 두 필드 가 있 습 니 다.
Expires 는 HTTP 1.0 의 산물 입 니 다. 현재 기본 브 라 우 저 는 기본적으로 HTTP 1.1 을 사용 하기 때문에 그 역할 은 기본적으로 무시 합 니 다.하지만 많은 사이트 들 이 그것 을 호 환 했다.이 값 은 서버 에서 돌아 오 는 만 료 시간 입 니 다. 즉, 다음 요청 시 요청 시간 이 서버 에서 돌아 오 는 만 료 시간 보다 적 고 캐 시 데 이 터 를 직접 사용 합 니 다.그러나 문 제 는 만 료 시간 이 서버 에서 생 성 된 것 으로 클 라 이언 트 시간 이 서버 시간 과 일치 하지 않 으 면 캐 시 명중 의 오 차 를 초래 할 수 있다 는 것 이다.HTTP 1.1 버 전에 서 Expires 는 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
HTTP 헤드 를 통 해 브 라 우 저 자원 의 마지막 수정 시간 을 알려 줍 니 다. 브 라 우 저 로 컬 에서 자원 캐 시 를 한 다음 요청 할 때 HTTP 헤드 If-Modified-Since
를 가 져 옵 니 다. 이 값 은 서버 가 지난번 에 준 Last-Modified
시간 입 니 다. 서버 는 브 라 우 저 를 가지 고 자원 의 현재 마지막 수정 시간 보다 전 달 됩 니 다.If-Modified-Since
보다 크 면 자원 이 수정 되 었 음 을 설명 합 니 다. 브 라 우 저 는 캐 시 를 다시 사용 할 수 없습니다. 서버 는 완전한 자원 브 라 우 저 를 다시 만 듭 니 다. 그렇지 않 으 면 브 라 우 저 는 캐 시 를 계속 사용 하고 304 상태 코드 를 되 돌려 줄 수 있 습 니 다.Etag
HTTP 머리 를 통 해 현재 자원 이 서버 에 있 는 유일한 표지 (생 성 규칙 은 서버 에 의 해 결정) 를 브 라 우 저 에 게 알려 줍 니 다. 브 라 우 저가 다시 요청 할 때 머리 If-None-Match
를 가 져 옵 니 다. 이 값 은 서버 가 지난번 에 준 Etag
값 입 니 다. 서버 는 자원 의 현재 Etag 가 If - None - Match 와 일치 하 는 지 비교 합 니 다.일치 하지 않 으 면 자원 이 수정 되 었 음 을 설명 합 니 다. 브 라 우 저 는 캐 시 를 더 이상 사용 할 수 없습니다. 그렇지 않 으 면 브 라 우 저 는 캐 시 를 계속 사용 하고 304 상태 코드 를 되 돌려 줍 니 다.주의해 야 할 것 은 Etag 의 검사 우선 순위 가 Last - Modified 보다 높다 는 것 입 니 다. 예 를 들 어 첫 번 째 요청, 서버 응답 헤더 가 포함 되 어 있 습 니 다.
두 번 째 요청, 브 라 우 저의 요청 헤더
총결산
HTTP 캐 시 에 있 는 전체 프로 세 스 를 다시 봅 시다.
나 에 대해 서
만약 문장 이 당신 에 게 수확 이 있다 면, 소장 하고 전송 할 수 있 습 니 다. 이것 은 나 에 게 큰 격려 가 될 것 입 니 다!또한 제 공중전화 [우리 부자 형] (coder 2025) 를 주목 할 수 있 습 니 다. 저 는 오리지널 알고리즘, 컴퓨터 기초 문장 을 지속 적 으로 출력 하 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.