협상 (콘텐츠 네고시에이션)
클라이언트가 선호하는 표현 요청
협상 헤더는 요청시에만 사용
- Accept : 클라이언트가 선호하는 미디어 타입 전달 (html, json..)
- Accept-Charset : 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
- Accept-Language : 클라이언트가 선호하는 자연 언어
Accept-Language
적용 전
![](https://velog.velcdn.com/images/heyhighbyee/post/ec4cec55-f002-46cc-8af2-544b9d7b8c8e/image.png)
Accept-Language
적용 후
요청한 언어로 응답
![](https://velog.velcdn.com/images/heyhighbyee/post/625c7e90-07de-43cb-af4d-d38a545b2b40/image.png)
🔎 복잡한 상황에서는?
요청한 언어가 없는 경우
![](https://velog.velcdn.com/images/heyhighbyee/post/93c27414-c5f0-41b1-91db-5e86dd695b3c/image.png)
협상 우선순위
1)
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
- ko-KR;q=1 (q생략)
- ko;q=0.9
- en-US;q=0.8
- en;q=0.7
결과
![](https://velog.velcdn.com/images/heyhighbyee/post/0227b0e3-708d-4b67-b8df-4ca4c66aba32/image.png)
2)
GET /event
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
![](https://velog.velcdn.com/images/heyhighbyee/post/68924d33-8252-483f-85a1-07921ab740ff/image.png)
text/plain의 경우 매칭되는 것이 없이 때문에 text;q=0.3으로 매칭