협상 (콘텐츠 네고시에이션) 클라이언트가 선호하는 표현 요청
클라이언트와 서버가 있을때 클라이언트가 원하는 표현으로 달라고 서버에 요청하는것이다. 그럼 서버는 클라이언트가 원하는 우선순위에 맞춰서 표현데이터를 만들어준다.
Accept : 클라이언트가 선호하는 미디어 타입 전달
Accept-Charset : 클라이언트가 선호하는 문자 인코딩
Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
Accept-Language : 클라이언트가 선호하는 자연 언어
협상 헤더는 요청시에만 사용
만약 한국어 브라우저를 사용하는 유저가 외국에 있는 이벤트 사이트에 접속하는데 만약 다중언어를 지원하는 페이지라는 가정하에 클라이언트가 한궁어를 사용하는지 서버는 알수가 없다 그럼 기본 언어인 영어를 보내주니 클라이언트는 선호하는 언어가 아닌 영어로 받게된다.
이런 상황에서 클라이언트가 Accept-Language로 선호하는 언어를 보내면 서버는 지원하는 언어중 한국어가 있음으로 Content-Language를 한국어로 설정해 보내주는것이다 . 헤더로 처리가 가능하다는 뜻!
만약 같은 상황인데 다중언어를 지원하는 서버에서 기본이 독일어이고 영어를 지원하는데
클라이언트는 한국어를 요청한 상황이다. 하지만 지원하지 않는 서버에서는 한국어를 지원하지 않기에 지원가능한 언어를 확인하지만 한국어는 없기에 기본 언어인 독일어를 보내게 된다. 이런 상황을 위해 우선순위 가 필요하다!!
협상과 우선순위1 Quality Values(q)
[ en은 퀄리티 값이 0.7 Ko는 퀄리티 값이 0.9 생략되어있으면 1 즉 ko-KR은 1 ]
위 처럼 우선순위를 정해서 보내게 되면 서버는 기본은 독일어지만 클라이언트는 한국어를 원하는걸 확인했다.하지만 한국어는 기본언어가 아니기에 지원 언어를 살펴보고 있으면 한국어 없다면 우선순위가 두번째인 영어를 확인하고 영어로 보내주게된다.
협상과 우선순위2 Quality Values(q)
디테일 한것부터 우선 순위가 된다 !
협상과 우선순위3 Quality Values(q)
만약 text/plain은 매칭되는게 없으니까 0.3 하지만 text/* 과 매칭되니까 0.3이라고 보면 된다!
만약 서버가 xml도 제공하고 json도 제공한다는 가정하에 어떤 클라이언트는 xml을 선호하고 또 다른 클라이언트는 json을 선호한다면 이 Accept에 xml 을 선호하는 클라이언트는 xml에 대한 우선순위를 json을 선호하는 클라이언트는 json에 우선순위를 높여서 보내면된다. 물론 서버에서 어떤걸 제공하는지 미리 알고 있어야 한다!