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
반응형
'42Seoul > 웹서버' 카테고리의 다른 글
CGI 스크립트의 환경변수 (0) | 2021.05.16 |
---|---|
docker run시 컨테이너 내의 파일 수정하기(환경변수 + sed명령어) (0) | 2020.11.01 |
도커에서 nginx + php-fpm 설치하기 (0) | 2020.10.21 |
Dockerfile을 작성하고 Docker 실행하기 (1) | 2020.10.20 |