종종 하나의 URL이 여러 리소스에 대응할 필요가 있는 경우가 있다.
ex) 콘텐츠를 여러 언어로 제공하는 경우
이런 판단을 하게 해주는 게 내용 협상
방법이다.
서로 다른 버전의 리소스가 배리언트
라고 불린다.
클라이언트 주도 협상
: 클라이언트에게 선택지를 준다.서버 주도 협상
: 서버가 자동으로 판단투명한 협상
: 중개자에게 선택하도록 부탁한다.클라이언트가 요청을 보내면 서버는 클라이언트에게 선택지를 보내주고 클라이언트가 그 중에서 선택한다.
서버가 클라이언트의 요청 헤더(클라이언트가 무엇을 선호하는지를 담는다)를 검증해서 어떤 버전을 제공할지 정한다.
Accept
User-Agent
q값 메커니즘
: HTTP는 서버가 가장 적절한 것을 선택할 수 있도록 q값 메커니즘을 제공한다. (Accept-Language : en;q=0.5, fr;q=0.0, nl;q=1.0)Vary헤더
: HTTP는 서버가 다운스트림 장치에게 요청이 어떻게 평가되는지 말해줄 수 있도록 Vary헤더를 제공한다.투명한 중간 장치(주로 프락시 캐시)가 서버를 대신해서 협상한다.
서버가 클라이언트의 요구에 맞는 문서를 아예 가지고 있지 않은 경우 에러를 내지 않고 클라이언트가 사용할 수 있는 무언가로 변환해준다.
ex) 고해상도 이미지 -> 저해상도 이미지
데이터를 클라이언트가 볼 수 있도록 한 포맷에서 다른 포맷으로 변환한다.
ex)HTML -> WML
문서에서 정보의 요점을 추출한다.
ex) 광고 제거
양을 늘리는 변환
ex) 자동 광고 생성과 사용자 추적 시스템