Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[HTTP] HTTP 헤더 - 검증 헤더 (ETag, If-Node-Match) 본문

HTTP

[HTTP] HTTP 헤더 - 검증 헤더 (ETag, If-Node-Match)

bomdy 2024. 10. 20. 22:54

2024.10.20 - [HTTP] - [HTTP] HTTP 헤더 - 캐시의 기본 동작 (검증 헤더)

 

[HTTP] HTTP 헤더 - 캐시의 기본 동작 (검증 헤더)

1️⃣ 만약 캐시가 없다면 ?  웹 브라우저가 star.jpg 라는 이미지를 서버에 요청을 했을 때 서버는 star.jpg 파일을 내려주고, HTTP 헤더와 star.jpg 에 관련된 내용이 들어있는 HTTP 바디를 포함한 HTTP

bomdy.tistory.com

✅ 지난 포스팅 정리

지난 시간에는 캐시를 사용해야 하는 이유와, 캐시의 유효시간이 지났을 때 처리하는 방법 등에 대해 알아보았습니다.

또한 검증 헤더는 크게 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 의 값이 같다면 캐시에서 사용하고, 다르다면 서버로부터 다시 데이터를 전달 받아 사용합니다.

 

 

ETag 가 포함된 HTTP 응답 메시지

 

웹 브라우저에서 첫 번째 요청을 보냈을 때 서버에서는 데이터를 내려주고 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 - 캐시와 조건부 요청 강의를 참고하여 작성했습니다.