5장의 125쪽에서 ‘내용 협상(Content Negociation)’ 개념이 궁금합니다.
내용 협상은 같은 URI일지라도 클라이언트(인간, 기계 등)에 따라 웹 서버가 다른 내용을 제공한다라고 이해하고 있는데요. 클라이언트가 서버에게 정보를 보낼 때에는 헤더에 담아 정보를 보내고, 서버는 헤더를 읽고 클라이언트에 맞는 방식으로 정보를 전달하는 것이라 생각했습니다.
[ 웹 클라이언트(인간) ] — (A에 대한 URI) —> [ 웹 서버 ] — (text/html) —> [ 웹 클라이언트(인간) ]
[ 웹 클라이언트(기계) ] — (A에 대한 URI) —> [ 웹 서버 ] — (rdf/xml) —> [ 웹 클라이언트(기계) ]
내용협상이란 동일한 URI일지라도 서버가 클라이언트에게 가장 적합한 컨텐츠 형식을 반환할 수 있는 메커니즘을 뜻합니다.
conneg라는 내용 협상 메커니즘은 HTTP 표준의 일부이며, 웹 클라이언트는 HTTP프로토콜을 사용하여 HTTP URI 검색에 대한 응답 내용을 협상할 수 있습니다.
클라이언트가 헤더를 이용해 요청 정보를 보내면, 서버는 그 정보를 보고 반환할 결과물을 결정하는 방식입니다.
여러가지 내용 협상 헤더들이 존재하는데, 그 종류에 따라 미디어 타입, 언어, 문자집합, 인코딩 등 다양한 형식들을 협상할 수 있다고 합니다.
내용협상은 월드와이드웹이 동작하는 데 필수적인 요소입니다. (일반적으로) 웹에서 주소라고 부르는 URL은 문서 사이의 연결을 위해 사용합니다.
어떤 문서에서 URL을 포함하는 링크를 선택하면 다른 문서로 이동하는데, 내용협상은 어떤 자원을 전달할지 판단하기 위해 사용합니다. 웹브라우저에서 영어나 다른 언어로 표현된 페이지에 접근하면, 자동으로 "번역"할지 선택하는 기능을 한번 정도 경험했을 텐데요. 이런 기능이 내용 협상을 통해 동작합니다.
@선은택 님이 언급했듯이, 내용 협상의 대상은 언어, 파일 형식 등 다양하게 동작합니다. @harampark 님이 설명한 것은 시맨틱 웹에서 동작하는 방식입니다. 이 경우, 내용협상은 URI로 표현된 자원을 RDF 또는 HTML 형식으로 제공할지 판단하는데 사용하고 있습니다. 링크드 데이터에 대한 연구가 활발했을 때, RDF 데이터를 보여주기 위한 브라우저를 개발했는데 (정확히 브라우저는 아니고, 브라우저의 extension으로), The Tabulator를 참고해 보세요 (현재 버전은 동작하지 않을 것 같네요)