Hacker News인프라 · 데브옵스

클라우드플레어, HTTP Vary 헤더 캐싱 지원 시작

원제 We just shipped support for the ugliest part of HTTP: Vary

112 포인트댓글 26
Key Point

같은 URL에서 언어나 형식이 다른 여러 응답을 캐싱할 때 효율성을 잃던 문제를 해결하는 방식이 나왔으므로, CDN을 쓰는 개발자와 운영자에게 캐시 전략을 재검토할 기회를 제공한다.

핵심 요약

  • HTTP의 Vary 응답 헤더는 캐시에 요청의 어떤 필드가 응답에 영향을 미치는지 알려주지만, 어떤 차이가 실제로 중요한지는 알려주지 않는 것이 문제다.
  • 같은 URL이 서로 다른 이미지 형식이나 언어로 여러 응답을 가질 수 있을 때, 캐시가 Vary를 무시하면 잘못된 응답을 전달하고, 모든 값을 구별하면 캐시 항목이 수천 개로 증가해 재사용성이 떨어진다.
  • 원점 서버가 영어, 프랑스어, 독일어 3가지만 지원해도 클라이언트의 Accept-Language 값이 다르면 캐시는 같은 응답을 별개 항목으로 저장하고, 수십 개 필드에서 변동하면 1000개 이상의 조합이 생겨 캐시 효율이 급락한다.
  • 클라우드플레어는 Cache Rules에서 Vary 지원을 추가해 세 가지 처리 방식을 제공한다: normalize는 Accept, Accept-Language, Accept-Encoding을 표준화해 동등한 요청이 같은 캐시를 공유하도록 하고, passthrough는 정확한 값 변동이 필요할 때 원본 바이트를 유지하며, bypass는 Cookie나 User-Agent처럼 개인화되거나 무한대 값을 가진 헤더를 캐시하지 않는다.
  • normalize 방식은 값을 소문자로 통일하고 품질 값으로 정렬해 클라이언트의 순서 차이를 제거하며, Accept-Language에서 en-US는 en으로 축약된다 (설정된 경우 제외).
  • 요청 처리 과정에서 Cache Rule은 원점 서버에 정규화된 값을 전달해 원점의 선택이 캐시 매칭과 일치하도록 보장하며, 응답에 Vary가 없으면 정상 캐싱하고, 일부 헤더가 bypass 설정이면 저장하지 않는다.
  • Vary: *는 요청의 모든 측면(IP 주소 포함)이 응답에 영향을 미칠 수 있다는 뜻이므로 항상 캐시를 우회한다.
  • 원점 서버는 캐시 가능한 모든 응답에서 일관되게 적절한 Vary 헤더를 반환해야 하며, 하나의 응답이 Vary를 생략하면 클라우드플레어가 변동성 없이 캐시해 잘못된 응답을 전달할 수 있다.
  • 같은 리소스의 캐시 설정을 변경해도 기존 콘텐츠는 자동으로 지워지지 않으며, 새 정책으로 요청이 누락되면서 새 키로 다시 채워진다.
  • Vary in Cache Rules은 모든 요금 계획(무료, Pro, Business, Enterprise)에서 대시보드, Rulesets API, Terraform을 통해 즉시 사용 가능하다.
  • 클라우드플레어는 향후 Availability Hints 초안의 아이디어를 평가 중이며, 이를 통해 원점 서버가 지원하는 표현을 직접 명시해 수동 설정 작업을 줄일 계획이다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗