HTTP 헤더에 따른 콘텐츠 협상 (Content negotiation)
42Seoul/웹서버

HTTP 헤더에 따른 콘텐츠 협상 (Content negotiation)

참고: MDN - Content negotiation

 

1. 콘텐츠 협상이란?

 클라이언트가 URL로 특정 리소스(문서)를 요청하면, 서버는 콘텐츠 협상(Content negotiation)을 통해 가장 적절한 프레젠테이션(리소스 버전)을 제공합니다. 예를 들어, 영미권에서는 영어로 된, 한국에서는 한글로 된 프레젠테이션을 볼 수 있도록, 적절한 리소스 버전을 골라내는 것도 콘텐츠 협상에 해당합니다.

 

 콘텐츠 협상에는 여러 방법이 있으나, 여기서는 클라이언트 Request의 HTTP 헤더에 따른 방법만 살펴보겠습니다.

 

 


 

2. HTTP Request 헤더에 따른 콘텐츠 협상

헤더

헤더 설명
Accept 클라이언트가 처리하고자 하는 미디어 리소스 타입(MIME 타입)
Accept-Charset 클라이언트가 이해할 수 있는 캐릭터 인코딩
Accept-Encoding 수용 가능한 (압축을 지원하는)콘텐츠 인코딩
Accept-Language 클라이언트가 선호하는 언어

 

문법

Accept 헤더명: <속성1>, <속성2>;q=<0~1>, <속성3>;q=<0~1>, *;q=<0~1> ...
  • 인자 가중치 (q: Quality value)
    헤더가 제시하는 속성이 여러 개일 경우, 인자 가중치 q를 함께 줄 수 있습니다. q는 0~1 사이의 값이며, 그 값이 높을수록 해당 속성의 우선순위도 높아집니다. (q가 지정되지 않았을 경우 q=1을 의미합니다)
  • 와일드카드 (*)
    해당 헤더의 속성으로 어떤 값이 와도 상관없을 경우, 와일드카드 * 를 줄 수도 있습니다.

 

예제

Accept-Charset

utf-8 혹은 iso-8859-15와 같은 캐릭터셋을 속성으로 가집니다.

Accept-Charset: utf-8, iso-8859-1;q=0.5, *;q=0.1

우선순위: utf-8 > iso-8859-1 > *(그 외 모든 char set)

 

Accept-Language

2개 혹은 3개 문자로 이루어진 문자열로 표현되는 언어를 속성으로 가집니다.

Accept-Language: ko, fr; q=0.9, en; q=0.5

우선순위: ko > fr > en

 

 


 

3. 콘텐츠 협상 결과

 콘텐츠 협상 결과에 따라, 적절한 리소스(문서)의 위치를 알리기 위해 다음과 같은 헤더를 사용합니다.

 

헤더

헤더 설명
Content-Location 콘텐츠 협상 이후, 그 결과로써 전달되는 리소스(문서)의 URL

 

문법

Content-Location: <url>

 

예제

예를 들어, Accept-Language 헤더에 따라 ko가 가장 선호되는 언어일 경우, 해당하는 URL을 지정할 수 있습니다.

Content-Location: /ko.html