Search
Duplicate

협상(Content Negotiation)

태그
HTTP 헤더 - 일반 헤더
2 more properties
협상
클라이언트가 선호하는 표현 요청을 말한다.
Accept : 클라이언트가 선호하는 미디어 타입 전달
Accept-Charset : 클라이언트가 선호하는 문자 인코딩
Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
Accept-Language : 클라이언트가 선호하는 자연 언어
협상 헤더는 요청시에만 사용한다.
Accept-Language
클라이언트가 선호하는 자연 언어
예시
다중 언어를 지원하는 서버가 있다고 가정하자. 이 서버는 영어와 한국어를 지원한다. 만약 클라이언트가 한국어 브라우저를 사용한다면 헤더에 아래와 같이 언어에 대한 정보를 넣어 서버에 요청할 수 있다.
Get /event Accept-Language: ko
Plain Text
복사
그러면 서버는 헤더에 Content-Language: ko 라는 헤더를 넣어서 알맞은 언어로 응답 해줄것이다.
만약 클라이언트가 헤더에 넣은 언어를 지원하지 않는 서버에 응답요청을 하면 어떻게 될까? → 우선순위에 대한 내용을 넣는다.
협상과 우선순위
Quality Values(q) 를 사용한다.
q 는 0 에서 1 사이의 값을 가지며 클수록 높은 우선순위를 가진다.
생략하면 q 의 값은 1 이 된다.
예시
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 ⚠️ ko-KR 의 q 는 생략 되어있다. 즉, q=1.
Plain Text
복사
구체적인 것이 우선한다.
예시
GET /event Accept: text/*, text/plain, text/plan;format=flowed, */*
Plain Text
복사
위와 같이 쓰여있지만 우선순위대로 다시 정렬하면 아래와 같다.
text/plain;format=flowed → text/plain → text/* → */*
구체적인 것을 기준으로 미디어 타입을 맞춘다.
예시
헤더에 아래와 같은 Accept 가 있다고 가정해보자.
Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
Plain Text
복사
Media Type
Quality
text/html;level=1
1
text/html
0.7
text/plain
0.3
image/jpeg
0.5
text/html;level=2
0.4
text/html;level=3
0.7
이 표의 구체적인 것을 기준으로 미디어 타입과 q 를 정한다.
text/* 의 경우 왜 q 가 0.3 일까?
text/html 이면 0.7 인데, text 뒤에 특정한 무언가가 없으므로 quality 는 0.3 이 된다.