가능세계
[Network] HTTP 헤더 살펴보기 - 콘텐츠 협상(Contents Negotiation) 본문
해외에서 서비스되는 웹 사이트에 방문한 경험이 있을 것입니다. 이때 해당 웹 사이트를 한국에서 접속하면 콘텐츠를 한국어로 보여주기도 합니다.
직접 웹 사이트의 언어 지원을 설정하지 않았는데도, 어떻게 해당되는 언어로 볼 수 있을까요?
바로 클라이언트와 서버 간의 HTTP 콘텐츠 협상
을 통해 이루어진 것입니다.
1. 콘텐츠 협상이란 무엇인가요?
HTTP에서 콘텐츠 협상이란, 동일한 URI에서 리소스의 서로 다른 버전을 제공하기 위해 사용하는 메커니즘입니다.
다시 말해, 웹 브라우저와 웹 서버 간 정보를 주고받을 때, 사용자에게 알맞는 형태의 리소스를 보여줄 수 있도록 "어떤 형태로 리소스를 주고받을지 정하는" 메커니즘을 일컫습니다.
콘텐츠 협상 헤더는 요청 시 사용되며, 보통은 서버 주도적 협상으로 이루어집니다.
클라이언트는 선호하는 설정 값이 담긴 HTTP 협상 헤더를 서버에 보냅니다.
예를 들어, 문서의 언어, 이미지 포맷 혹은 콘텐츠 인코딩에 있어 어떤 것이 적절한지 명시할 수 있습니다.
서버는 그것들을 힌트로써 사용해 사용자에게 최선의 콘텐츠를 선택해 표현 데이터를 전송합니다.
2. 협상 헤더 종류
Accept
: 클라이언트가 선호하는 미디어 타입 전달Accept-Charset
: 클라이언트가 선호하는 문자 인코딩Accept-Encoding
: 클라이언트가 선호하는 압축 인코딩Accept-Language
: 클라이언트가 선호하는 자연 언어
3. Accept-Language 요청 헤더
3-1. 우선순위를 지정할 수 있습니다
독일 웹 사이트에 한국어 페이지를 요청한 상황을 가정해봅시다. 이때 다중언어 지원 서버가 독일어와 영어만을 지원한다면, 독일어 보단 영어가 나오도록 설정하고 싶습니다.
이처럼 서버에서 해당 타입을 지원하지 않을 경우를 대비해 Accept-Language 협상 헤더를 통해 클라이언트가 선호하는 언어의 우선순위를 지정할 수 있습니다.
3-2. 우선순위는 다음과 같은 방식으로 동작합니다
1. Qunatity Values(q) 값이 높은 조건을 우선시한다.
Qunatity Values(q)는 0부터 1까지의 값입니다.
값이 클수록 높은 우선순위를 가지며, 생략 시 1이 됩니다.
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
위 예에서 우선순위는 다음과 같습니다.
- ko-KR
- ko
- en-US
- en
2. 구체적인 조건이 우선한다.
해당 헤더의 속성으로 어떤 값이 와도 상관없을 경우, 와일드카드 * 를 줄 수 있습니다.
Accept: text/*, text/plain, text/plain;format=flowed, */*
위 예에서 우선순위는 다음과 같습니다.
text/plain;format=flowed
text/plain
text/*
*/*
3. 구체적인 조건에 맞추어 미디어 타입을 맞춘다.
Accept: text/*;q=0.3,text/html;q=0.7,text/html;level=1,text/html;level=2;q=0.4,*/*;q=0/5
text/plain
의 경우 위에 명시된 내용에 매칭되는 내역이 없기 때문에 text/*;q=0.3
에 포함되어 0.3의 우선순위를 가지게 됩니다.
참고
'Blog > Network' 카테고리의 다른 글
[Network] HTTP 헤더 살펴보기 - 쿠키(HTTP Cookies) (0) | 2023.09.11 |
---|---|
[Network] HTTP 헤더 살펴보기 - 인증(Authentication) (0) | 2023.09.11 |
[Network] HTTP 헤더 살펴보기 - HTTP 메시지 전송 방식 (0) | 2023.09.11 |
[Network] HTTP 헤더 살펴보기 - 요청 헤더와 응답 헤더 (0) | 2023.09.11 |
[Network] HTTP 헤더 살펴보기 - 표현 헤더(Representation Header) (2) | 2023.09.11 |