콘텐츠 협상 (Content negotiation) : 클라이언트가 선호하는 표현 요청
Accept: 클라이언트가 선호하는 미디어 타입 전달
Accept-Charset: 클라이언트가 선호하는 문자 인코딩
Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
Accept-Language: 클라이언트가 선호하는 자연 언어
협상 헤더는 요청시에만 사용
Accept-Language 헤더를 통해 클라이언트가 원하는 언어를 어떻게 서버에 요청할 수 있는지 알아봅시다.
한국어 브라우저에서 특정 웹사이트에 접속했을 때 콘텐츠 협상(Accept-Language)이 적용되지 않았다면 서버는 요청으로 받은 우선순위가 없으므로 기본 언어로 설정된 영어로 응답합니다.
클라이언트에서 Accept-Language로 KO를 작성해 요청한다면 서버에서는 해당 우선순위 언어를 지원할 수 있기 때문에 한국어로 된 응답을 돌려줍니다.
클라이언트는 한국어를 선호하기에 Accept-Language에 한국어를 요청했지만 서버는 한국어를 지원하지 않으며 기본 언어는 독일어로 설정되어 있습니다.
클라이언트는 독일어는 너무 어렵기 때문에 한국어가 안되면 영어로라도 응답을 받기 원합니다.
협상과 우선순위 (Quality Values(q))
GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Quality Values(q) 값 사용
0~1, 클수록 높은 우선순위
생략하는 경우, 1
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
1. ko-KR;q=1(q 생략)
2. ko;q=0.9
3. en-US;q=0.8
4. en;q=0.7
이와 같은 문제를 해결하기 위해 협상에서는 원하는 콘텐츠에 대한 우선순위를 지정할 수 있습니다.
1부터 0까지 우선순위를 부여하면 이를 토대로 서버는 응답을 지원합니다.
1순위인 한국어를 서버에서는 지원하지 않지만 2순위인 영어를 지원하기에 서버에서는 우선 순위에 있는 영어를 독일어보다 클라이언트가 선호하기에 영어로 응답을 주게 됩니다.