ETag와 조건부 요청으로 캐시 재검증 읽기
ETag는 표현을 비교하기 위한 식별자입니다. 요청 메서드, 비교 규칙, 저장된 응답을 함께 읽어야 재검증 결과를 이해할 수 있습니다.
발행·오류 제보: infostoa · 편집 기준
이 글의 개별 작성자와 전문 검토자 정보는 제공되지 않습니다.
ETag 재검증은 저장된 표현과 서버의 기대값을 비교하며, 조건부 GET의 일치 결과인 304를 통해 저장 내용을 재사용할 수 있습니다.
실제 네트워크 측정이 아닌 개념 설명입니다.
검증자와 신선도 시계는 다르다
ETag는 표현을 비교하기 위한 불투명한 식별자이며 시계나 접근 허가 토큰이 아닙니다. 내용이 바뀌지 않아도 저장된 응답은 오래된 상태가 될 수 있습니다. 신선도는 적용되는 캐시 규칙에 따라 응답을 재사용할 수 있는지 묻고, 재검증은 확인을 거쳐 저장된 표현을 계속 쓸 수 있는지 묻습니다. HTTP 의미론
네트워크 기록에서는 두 질문을 구분해야 합니다. 신선도 기간이 지났다는 사실만으로 편집자가 새 내용을 게시했다고 판단할 수 없습니다. 같은 태그가 두 번 보여도 어느 캐시가 응답했으며 왜 요청했는지는 알 수 없습니다. URL과 메서드, 캐시 지시자, 검증자를 먼저 기록하고 한 필드를 응답의 전체 이력처럼 읽지 않는 것이 좋습니다.
약한 태그에서 생성 공식을 추측하지 않는다
ETag 값은 따옴표로 둘러싼 불투명한 값입니다. W/는 약한 검증자를 표시하며 바이트 동일성 없이 의미상 동등함을 나타낼 수 있습니다. 서버의 생성 공식을 지정하지 않고 공백 차이를 자동으로 동등하게 만드는 것도 아닙니다. 강한 검증자에는 더 엄격한 표현 동일성 요건이 있으며 바이트 범위 처리 같은 용도에서 차이가 중요합니다. 태그 해석
문서 읽기용 가상 예로 저장된 두 버전을 A와 B라고 부를 수 있습니다. 이는 실제 ETag가 아니라 설명용 이름입니다. 서비스가 바이트 차이를 구분하려는지 의미를 동등하게 취급하려는지 질문해야 합니다. 값이 해시처럼 보인다는 추측만으로 답할 수 없습니다. 서버 규칙이 확인되면 기록하고 그렇지 않으면 생성 방법을 미확인으로 남깁니다. 구문만으로 파일시스템 변수나 해시 알고리즘이 정해지지 않습니다.
헤더와 메서드가 조건의 의미를 정한다
If-None-Match는 강한 태그에도 약한 비교를 사용합니다. 엔티티 태그가 일치하면 If-None-Match 선행 조건은 거짓이 됩니다. 이때 GET이나 HEAD는 304, 다른 메서드는 412를 사용합니다. If-Match는 강한 비교를 쓰는 별도 선행 조건이며 단순한 반대 헤더가 아닙니다. 조건이 충족되어도 권한이나 다른 요청 처리와 무관하게 성공하는 것은 아닙니다. 조건부 요청 규칙 If-Match 정의
두 기록을 비교할 때 태그보다 먼저 메서드를 적어야 합니다. 가상의 조회 요청과 변경 요청에는 비슷한 조건이 있어도 결과의 의미가 다릅니다. 조회에 대한 설명을 변경 요청에 그대로 적용하지 마세요. 동시 편집 사례라면 편집자가 처음 본 표현과 보낸 기대값을 구분해 기록합니다. 헤더가 있다는 사실만으로 애플리케이션이 모든 충돌을 올바르게 처리했다고 증명할 수는 없습니다.
304는 저장된 본문과 새 메타데이터를 연결한다
304에는 응답 콘텐츠가 없습니다. 캐시는 적격한 저장 응답을 식별하고 예외를 포함한 규칙에 따라 받은 필드를 갱신한 뒤 저장된 내용을 재사용할 수 있습니다. RFC 9110은 대응하는 200에 포함되었을 헤더 필드 중 지정된 일부를 요구하며, 모든 필드를 요구하지 않습니다. 모든 헤더의 일괄 교체나 디스크 전용 동작, 자동적인 새 수명 부여를 뜻하지 않습니다. 304 응답 저장 응답 갱신 규칙
가상의 기록에서 앞선 본문 포함 응답과 뒤의 304를 함께 읽어야 합니다. 뒤의 교환만으로 없는 저장 본문을 제공할 수 없습니다. 유지한 본문과 받은 메타데이터를 따로 적으면 이해하기 쉽습니다. 앞선 응답이 없다면 304만으로 내용을 복원할 수 없습니다. 그 줄에 본문이 없는 것은 재검증의 정상적인 형태이며 독자에게 빈 문서를 보냈다는 증거가 아닙니다.
전문 관점에서 캐시 정책을 읽는다
MDN의 전문 캐시 안내는 개인 캐시와 공유 캐시, no-cache와 no-store를 구분합니다. 한정 값 없는 지시자에서 no-cache는 재사용 전 검증을 요구하고 no-store는 저장을 금지하며 private은 공유 캐시 저장을 제한합니다. private이 브라우저 저장까지 금지하는 것은 아니고 쿠키만으로 private 지시자가 설정되는 것도 아닙니다. 캐시 정책 안내
어느 응답이 저장되며 어느 캐시가 보유할 수 있는지, 재사용 조건과 확인 계기가 무엇인지 질문하는 점검표로 활용할 수 있습니다. 기록에 캐시나 이전 응답이 보이지 않으면 불확실성을 남겨야 합니다. 304는 서버 어디에도 변화가 없다는 인증이 아니며 ETag는 내용의 안전성을 별도로 인증하지 않습니다. 여기의 흐름은 해석 연습이며 CDN 측정이나 대역폭, 지연, 충돌 방지의 보장은 아닙니다.