Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

가능세계

[Network] HTTP 헤더 살펴보기 - 콘텐츠 협상(Contents Negotiation) 본문

Blog/Network

[Network] HTTP 헤더 살펴보기 - 콘텐츠 협상(Contents Negotiation)

cona-tus 2023. 9. 11. 10:42

network-icon

 

해외에서 서비스되는 웹 사이트에 방문한 경험이 있을 것입니다. 이때 해당 웹 사이트를 한국에서 접속하면 콘텐츠를 한국어로 보여주기도 합니다.

 

직접 웹 사이트의 언어 지원을 설정하지 않았는데도, 어떻게 해당되는 언어로 볼 수 있을까요?

 

바로 클라이언트와 서버 간의 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의 우선순위를 가지게 됩니다.




참고