본문 바로가기

소프트웨어 이야기/인프라

[Varnish] Vary User-Agent HTTP Header가 캐시 퍼포먼스에 미치는 영향

Vary HTTP Header란?

vary: Accept-Language, User-Agent, Cookie, Accept-Encoding

동일한 URL에서 사용자 에이전트에 따라 다른 응답을 내려줄 때 가용되는 Header이다.

 

Vary User-Agent HTTP Header가 Cache Hit에 미치는 영향

과거의 웹 환경에서는 에이전트 환경 별로 보여주는 HTML이 달랐다. 그래서 Vary Header의 User-Agent 값을 활용하여 클라이언트 별로 다른 데이터를 내려줬다.

그러나 오늘날에는 에이전트별로 다른 HTML을 내려주지 않는다.

그리고 현대 웹 개발에서는 JSON 데이터으로 데이터를 주고받기 때문에, 유저 에이전트 별로 데이터가 다른 경우는 흔치 않다.

때문에 Vary HTTP Header는 과거의 웹 개발 방식을 지원하기 위한 표준으로 볼 수 있다.

오늘날 User Agent Header의 종류는 무척 다양하다. 그래서 Agent 별로 다른 캐시를 적용하는 것은, Cache Hit율을 떨어트리게 된다.

 

아래와 같은 User Agent가 있을 때, 동일한 URL을 호출해도 캐시 데이터를 사용할 수 없다.

  • Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
  • Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
  • Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
  • Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

 

때문에 URL의 응답값이 UserAgent에 영향을 받지 않는 경우, Vary Header의 UserAgent 기능을 사용하지 않는 것이 좋다.

 

바니시에서도 Vary UserAgent를 사용하지 않을 것을 권장한다. 만약 사용해야한다면, UserAgent를 정규화하여 사용할 것을 권장하고 있다.

 

참고