본문 바로가기
HTTP

[9] HTTP content Negotiation (협상)

by onejunu 2021. 3. 29.

HTTP 프로토콜은 웹 브라우저가 선호하는 내용을 가져오기 위해 서버와 협상할 수 있다.

서버에서 제공하는 컨텐츠가 브라우저에 지원하지 않는다면 클라이언트 입장에서 불편할 수 밖에없다. 따라서 서버에서 클라이언트가 선호하는 컨텐츠를 바탕으로 협상할 수 있는 메커니즘을 지원한다. 대표적으로 Accept 라는 이름이 붙은 HTTP Request가 해당한다.

 

요청시에만 사용!

1) Accept : 클라이언트가 선호하는 미디어 타입

2) Accept-Charset : 클라이언트가 선호하는 문자 인코딩

3) Accept-Encoding : 클라이언트가 선호하는 압축 인코딩

4) Accept-Language : 클라이언트가 선호하는 언어

 

Accept-Language를 사용하여 요청헤더 예시

GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

q = Quality Value 라고하며 0~1 사이값을 지닌다. 값이 높을 수록 선호도가 높다는 것이다.

위 예시는 ko > en-US > en 순으로 선호도를 가진다. 서버에서 3가지 모두 언어 설정에 없다면 해당 서버의 default언어를 제공한다.


Accept 예시

GET /event
Accept: text/*,text/plain,text/plain;format=flowed, */*

미디어 타입이 위와 같을 때 우선 순위는 구체적인 것 순으로 지정된다.

 

1. text/plain;format=flowed

2. text/plain

3. text/*

4. */*

 

q = Quality Value를 사용하여 선호도를 직접 지정할 수 있다.

GET /event
Accept: text/*;q=0.9,text/plain;q=0.8,text/plain;format=flowed, */*;q=0.1

 

1. text/plain;format=flowed ( 지정하지 않으면 q=1)

2. text/*

3. text/plain

4. */*

 

 

댓글