맨위로가기

HTTP ETag

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

HTTP ETag는 웹 서버가 리소스의 특정 버전을 식별하는 데 사용하는 HTTP 헤더로, 캐싱 메커니즘의 효율성을 높이기 위해 사용된다. ETag는 리소스 내용의 해시, 마지막 수정 타임스탬프 또는 개정 번호를 사용하여 생성되며, 서버는 클라이언트가 보낸 ETag와 현재 리소스의 ETag를 비교하여 리소스 변경 여부를 확인한다. ETag는 강력 유효성 검사(바이트 단위 동일성 확인)와 약한 유효성 검사(의미론적 동일성 확인)를 지원하며, "W/" 접두사 유무로 구분된다. ETag는 웹 페이지 모니터링 시스템에도 사용될 수 있지만, 사용자 추적에 악용될 수 있다는 문제점도 존재한다.

더 읽어볼만한 페이지

  • 캐시 - 웹 캐시
    웹 캐시는 웹 서버와 클라이언트 사이에서 웹 요청 응답을 저장하고 재사용하여 웹 페이지 로딩 속도를 개선하는 기술로, HTTP 프로토콜을 통해 제어되며, 디지털 밀레니엄 저작권법과 한국의 인터넷 환경에서 중요한 역할을 한다.
  • 캐시 - Dinero
    Dinero IV는 UNIX 계열 운영 체제에서 사용 가능한 시뮬레이션 도구로, 소스포지에서 다운로드 및 설치하여 명령줄을 통해 실행하며, 트레이스 파일을 생성하여 시뮬레이션 과정을 기록한다.
  • 프록시 서버 - 웹 캐시
    웹 캐시는 웹 서버와 클라이언트 사이에서 웹 요청 응답을 저장하고 재사용하여 웹 페이지 로딩 속도를 개선하는 기술로, HTTP 프로토콜을 통해 제어되며, 디지털 밀레니엄 저작권법과 한국의 인터넷 환경에서 중요한 역할을 한다.
  • 프록시 서버 - Microsoft Forefront Threat Management Gateway
    마이크로소프트 Forefront Threat Management Gateway (TMG)는 네트워크 보안을 위해 방화벽, VPN, 프록시 서버 기능과 악성 코드 방어, 콘텐츠 필터링 기능을 제공하는 통합 보안 게이트웨이 솔루션이다.
  • 인터넷 프라이버시 - 구글 스트리트 뷰
    구글 스트리트 뷰는 구글이 제공하는 파노라마 가상 거리 보기 서비스이며, 2007년 미국에서 처음 출시되어 전 세계 83개국에서 360도 거리 모습을 제공하며, 개인 정보 보호 문제를 위해 얼굴과 번호판을 흐리게 처리한다.
  • 인터넷 프라이버시 - 잊힐 권리
    잊힐 권리는 인터넷 환경에서 개인의 프라이버시 보호를 위해 제기된 개념으로, 유럽 연합에서 법제화가 추진되었으며, 대한민국에서는 인터넷 자기게시물 접근배제요청권 가이드라인 발표 및 디지털 잊힐 권리 시범사업을 시작했다.
HTTP ETag

2. ETag 생성

HTTP 헤더에서 ETag 사용은 선택 사항이며, ETag 생성 방법은 HTTP 사양에 명시되어 있지 않다.[12] ETag는 HTTP에서 필수 사항이 아니며, 생성 방법에 대한 특별한 규정은 없다.

일반적으로 ETag를 생성할 때는 리소스 내용의 충돌 방지 해시 함수나 최종 수정 일시의 해시를 사용한다.

2. 1. ETag 생성 시 고려 사항

ETag를 생성할 때에는 리소스 내용의 충돌 방지 해시 함수, 마지막 수정 타임스탬프의 해시, 또는 개정 번호를 사용하는 것이 일반적이다.[12]

오래된 캐시 데이터를 사용하지 않으려면, ETag가 (실용적인 범위에서) 고유해야 한다. 그러나 CRC 같은 단순한 체크섬 함수는 충돌이 발생하여 ETag에 의한 캐시 판정이 제대로 수행되지 않을 수 있다.[12]

https://tools.ietf.org/html/rfc7232#section-2.3.3 RFC-7232는 ETag가 콘텐츠 코딩을 인식해야 한다고 명시한다. 예를 들면 다음과 같다.

  • ETag: "123-a" – Content-Encoding이 없는 경우
  • ETag: "123-b" – Content-Encoding: gzip인 경우


서버 구현에 따라, 디스크상의 inode 등 환경 의존적인 값을 ETag에 사용하기도 한다. 이 경우, 웹 서버를 클러스터로 구성하거나 여러 서버를 사용하면, 한 서버에서 반환된 ETag가 다음 요청 시 다른 서버에서 照合(조합)하면 일치하지 않아 캐시 효율성이 떨어진다.[13]

3. 강력 유효성 검사 및 약한 유효성 검사

ETag는 '강력 유효성 검사'와 '약한 유효성 검사'를 모두 지원하며, ETag 식별자에 "W/"가 있는지 여부로 구분한다.[11]


  • "123456789" – 강력 ETag
  • W/"123456789" – 약한 ETag


강력 유효성 검사는 두 리소스가 바이트 단위로 동일함을 나타내고, 약한 유효성 검사는 두 표현이 의미론적 동등성을 갖는다는 것을 의미한다.

3. 1. 강력 유효성 검사 (Strong Validation)

ETag는 ''강력 유효성 검사''와 ''약한 유효성 검사''를 모두 지원하며, ETag 식별자에 "W/"가 있는지 여부로 구분한다.[11]

"123456789" -- 강한 ETag 값

강력 유효성 검사를 통과한 ETag는 두 리소스 표현의 내용이 바이트 단위로 동일하고, Content-Language 등의 다른 모든 엔티티 필드도 변경되지 않았음을 나타낸다. 강력 ETag는 바이트 서빙과 같이 부분 응답의 캐싱 및 재조립을 허용한다.[11]

3. 2. 약한 유효성 검사 (Weak Validation)

ETag 식별자에 "W/"가 있으면 약한 유효성 검사, 없으면 강력 유효성 검사이다.[11]

```

W/"123456789" -- 약한 ETag 값

```

약한 유효성 검사를 통과한 ETag는 두 표현이 의미론적 동등성을 갖는다는 것만을 나타낸다. 이는 실질적인 목적에서 교환 가능하고 캐시된 복사본을 사용할 수 있음을 의미한다. 그러나 리소스 표현이 반드시 바이트 단위로 동일하지 않으므로 약한 ETag는 바이트 범위 요청에 적합하지 않다. 약한 ETag는 동적 웹 페이지와 같이 웹 서버에서 강력 ETag를 생성하는 것이 실용적이지 않은 경우에 유용할 수 있다.

4. ETag의 일반적인 사용 예시

일반적인 사용법에서, URL을 검색하면 웹 서버는 해당 리소스의 현재 표현과 함께 해당 ETag 값을 반환하며, 이는 HTTP 응답 헤더 "ETag" 필드에 배치된다.[2]

```

ETag: "686897696a7c876b7e"

```

그런 다음 클라이언트는 ETag와 함께 표현을 캐싱할 수 있다. 나중에 클라이언트가 동일한 URL 리소스를 다시 검색하려는 경우, 먼저 로컬에 캐시된 URL 버전이 만료되었는지 여부를 결정한다(Cache-Control 및 Expire 헤더를 통해). URL이 만료되지 않은 경우 로컬에 캐시된 리소스를 검색한다. URL이 만료된 것으로 판단되면 (''stale'') 클라이언트는 이전에 저장한 ETag 값을 "If-None-Match" 필드에 포함하여 서버에 요청을 보낸다.[2]

```

If-None-Match: "686897696a7c876b7e"

```

이 후속 요청에서 서버는 이제 클라이언트의 ETag와 리소스의 현재 버전의 ETag를 비교할 수 있다. ETag 값이 일치하면 리소스가 변경되지 않았음을 의미하며, 서버는 '''HTTP 304 Not Modified''' 상태와 함께 매우 짧은 응답을 보낼 수 있다. 304 상태는 클라이언트에게 캐시된 버전이 여전히 유효하며 이를 사용해야 함을 알려준다.[2]

그러나 ETag 값이 일치하지 않으면 리소스가 변경되었을 가능성이 높다는 의미이며, ETag를 사용하지 않은 경우와 마찬가지로 리소스의 콘텐츠를 포함한 전체 응답이 반환된다. 이 경우 클라이언트는 이전에 캐시된 버전을 새로 반환된 리소스 표현과 새 ETag로 대체할 수 있다.[2]

ETag 값은 웹 페이지 모니터링 시스템에서 사용할 수 있다. 효율적인 웹 페이지 모니터링은 대부분의 웹사이트에서 웹 페이지에 ETag 헤더를 설정하지 않는다는 사실에 의해 방해받는다. 웹 모니터가 웹 콘텐츠가 변경되었는지에 대한 힌트가 없는 경우, 게시자와 구독자 모두의 컴퓨팅 리소스를 사용하여 모든 콘텐츠를 검색하고 분석해야 한다.[2]

5. ETag를 사용한 사용자 추적 문제

ETag는 HTTP 쿠키가 개인 정보 보호를 중시하는 사용자에 의해 삭제되는 경우가 많아지면서, 고유한 사용자를 추적하는 데 사용될 수 있다.[4] 2011년 7월, 아슈칸 솔타니와 캘리포니아 대학교 버클리 연구팀은 훌루 등 여러 웹사이트에서 ETag를 추적 목적으로 사용하고 있다고 보고했다.[5] 이후 훌루와 KISSmetrics는 이러한 행위를 중단했다.[6] KISSmetrics와 20개 이상의 고객사는 "삭제 불가능한" 추적 쿠키와 유사하게 ETag를 사용한 것에 대해 집단 소송에 직면해 있다.[7]

ETag는 브라우저에 의해 캐시되고 동일한 리소스에 대한 후속 요청과 함께 반환되므로, 추적 서버는 받은 ETag를 반복하여 ETag가 영구적으로 유지되도록 할 수 있다. 이는 영구 쿠키와 유사한 방식이다. 추가적인 캐싱 헤더도 ETag 데이터 보존을 향상시킬 수 있다.[8] 브라우저 캐시를 지우면 ETag를 삭제할 수 있지만, 브라우저마다 구현 방식은 다를 수 있다.

5. 1. ETag 추적 방지

ETag는 HTTP 쿠키가 개인 정보 보호를 중시하는 사용자에 의해 점점 더 많이 삭제되기 때문에, 고유한 사용자를 추적하는 데 사용될 수 있다.[4] 2011년 7월, 아슈칸 솔타니(Ashkan Soltani)와 캘리포니아 대학교 버클리(UC Berkeley) 연구팀은 훌루(Hulu)를 포함한 여러 웹사이트에서 추적 목적으로 ETag를 사용하고 있다고 보고했다.[5]

ETag는 브라우저에 캐시되어 요청 시마다 다시 전송되며, 추적 서버가 동일한 ETag를 계속 반환함으로써 영구적으로 사용자를 추적할 수 있다. 브라우저에 따라 세부 사항은 다르지만, 브라우저 캐시를 지우면 ETag도 삭제할 수 있다.[14][15] 2011년 7월, Ashkan Soltani와 캘리포니아 대학교 버클리(University of California, Berkeley)의 연구자가 사용자 추적을 위해 ETag를 사용하는 웹사이트에 대해 보고했다.[16]

참조

[1] 웹사이트 Editing the Web – Detecting the Lost Update Problem Using Unreserved Checkout https://www.w3.org/1[...] 1999-05-10
[2] 웹사이트 ETag – HTTP {{!}} MDN https://developer.mo[...] 2021-10-10
[3] 웹사이트 Mismatched export.arxiv.org ETag https://gist.github.[...]
[4] 웹사이트 tracking without cookies http://www.arctic.or[...] 2003-02-17
[5] 간행물 Flash Cookies and Privacy II: Now with HTML5 and ETag Respawning 2011-07-29
[6] 웹사이트 Flash Cookies and Privacy II https://ashkansoltan[...] 2023-06-27
[7] 웹사이트 AOL, Spotify, GigaOm, Etsy, KISSmetrics sued over undeletable tracking cookies https://www.extremet[...] 2023-06-27
[8] 웹사이트 Cookieless cookies https://github.com/l[...] 2023-06-27
[9] 웹사이트 Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout https://www.w3.org/1[...] 1999-05-10
[10] 문서 上野(2013)
[11] 문서 上野(2013)
[12] 문서 上野(2013)
[13] 웹사이트 Configure ETags http://developer.yah[...] 米Yahoo! 2013-08-20
[14] 웹사이트 tracking without cookies http://www.arctic.or[...] 2003-02-17
[15] 웹사이트 IPアドレス・クッキー・JavaScript・UAなどを使わずユーザーを個別に追跡する方法 https://gigazine.net[...] Gigazine 2013-08-19
[16] 웹사이트 Flash Cookies and Privacy II: Now with HTML5 and ETag Respawning https://papers.ssrn.[...] 2011-07-29
[17] 웹인용 Editing the Web – Detecting the Lost Update Problem Using Unreserved Checkout https://www.w3.org/1[...] 1999-05-10
[18] 웹인용 ETag – HTTP {{!}} MDN https://developer.mo[...] 2021-10-10



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com