봄디의 개발일지
[HTTP] HTTP 헤더 - 검증 헤더 (ETag, If-Node-Match) 본문
2024.10.20 - [HTTP] - [HTTP] HTTP 헤더 - 캐시의 기본 동작 (검증 헤더)
✅ 지난 포스팅 정리
지난 시간에는 캐시를 사용해야 하는 이유와, 캐시의 유효시간이 지났을 때 처리하는 방법 등에 대해 알아보았습니다.
또한 검증 헤더는 크게 Last-Modified 와 ETag 가 있고, Last-Modified 는 if-modified-since 와 같이 사용하고
ETag 는 if-none-match 와 함께 사용하며, Last-Modified 가 가지고 있는 단점에 대해 알아보았습니다.
이번 포스팅에서는 ETag 와 If-Node-Match 에 대해 자세히 알아보겠습니다.
1️⃣ ETag 와 If-Node-Match
ETag 란 Entity Tag 를 의미합니다. 캐시용 데이터에 임의의 고유한 버전 이름을 달아두는 것이죠.
예를 들어 ETag: "v1.0" , ETag: "a2jidwjkji3" 와 같이 부여할 수 있습니다.
데이터가 변경이 되게 되면 Hash 를 다시 생성하여 파일의 컨텐츠가 다름을 인지하고 ETag 의 이름을 바꾸어서 변경합니다.
예를 들어 ETag: "aaaaa" ➡ ETag: "bbbbb" 로 변경할 수 있습니다.
Last-Modified 날짜와는 다르게 단순히 ETag 의 값만 보고 ETag 의 값이 같다면 캐시에서 사용하고, 다르다면 서버로부터 다시 데이터를 전달 받아 사용합니다.
웹 브라우저에서 첫 번째 요청을 보냈을 때 서버에서는 데이터를 내려주고 HTTP 응답 메시지에 ETag: "aaaaaaaaaa" 정보를 추가하여 웹 브라우저에 내려줍니다.
마찬가지로 브라우저 캐시에 응답결과를 저장합니다. cache-control: max-age=60 이므로 유효 시간은 60초입니다.
두 번째로 웹 브라우저가 요청을 보냈을 때 브라우저 캐시에 있는 캐시의 유효 시간이 이미 끝났다면, 웹 브라우저는
캐시가 가지고 있는 ETag 정보를 If-Node-Match 에 포함하여 서버로 전달합니다.
만약 서버가 가지고 있는 star.jpg 의 ETag 가 캐시에 있는 ETag 와 동일하다면 데이터가 아직 수정되지 않았음을 의미하고
HTTP 바디를 제외하고 헤더만을 포함해서 웹 브라우저로 응답합니다.
이 때 데이터의 변화가 없음을 알려주기 위해 304 Not Modified 를 사용합니다.
웹 브라우저는 응답 결과를 보고 내부적으로 캐시를 갱신하고, 재활용합니다.
✅ ETag 와 If-None-Match 정리
단순하게 ETag 만 서버에 보내서 같을 경우 동일한 데이터를 유지하고, 다르면 다시 받으면 됩니다.
캐시 제어 로직을 서버에서 완전히 관리할 수 있습니다. 이로써 클라이언트는 이 값을 단순히 서버에 제공할 뿐 캐시에 대한 매커니즘을 몰라도 사용가능합니다.
🔍 참고글
인프런 김영한 강사님의 [모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 9. HTTP 헤더2 - 캐시와 조건부 요청 강의를 참고하여 작성했습니다.
'HTTP' 카테고리의 다른 글
[HTTP] 캐시 제어 헤더 (Cache-Control, Pragma, Expires, 프록시 캐시 서버) (0) | 2024.10.20 |
---|---|
[HTTP] HTTP 헤더 - 캐시의 기본 동작 (검증 헤더 Last-Modified) (3) | 2024.10.20 |
[HTTP] HTTP 헤더 - 쿠키 (1) | 2024.10.13 |
[HTTP] HTTP 헤더 - 일반 헤더 (전송 방식 / 일반 정보 / 특별한 정보) (3) | 2024.10.13 |
[HTTP] HTTP 헤더 - 일반 헤더 (표현/협상) (4) | 2024.10.06 |