728x90
콘텐츠 협상 (Cotent Negotiation)이란?
협상이란 둘 이상의 개체 또는 당사자 사이에서 의사소통과 상호작용을 통해 합의점이나 타협점을 찾는 과정을 말합니다. 이와 같은 맥락에서 콘텐츠 협상은 HTTP에서 발생하는 상호작용으로서, 동일한 URI에서 리소스의 서로 다른 버전을 제공하기 위해 사용하는 메커니즘입니다. 따라서 사용자 에이전트가 사용자에게 문서의 언어, 이미지 포맷 혹은 컨텐츠 인코딩에 있어 어떤 것이 적절한지 명시하는 것을 의미합니다.
콘텐츠 협상은 크게 서버주도, 클라이언트가 있습니다.
서버 주도 콘텐츠 협상 (Content Negotiation, Server-driven Negotiation)
- 서버가 클라이언트의 요청을 기반으로 가장 적합한 컨텐츠를 선택합니다.
- 서버는 클라이언트의 요청 헤더를 분석하여 언어, 콘텐츠 유형, 인코딩 등을 결정합니다.
- 서버는 선택된 컨텐츠와 함께 응답을 반환합니다.
클라이언트 주도 콘텐츠 협상 (Agent-driven Negotiation, Client-driven Negotiation):
- 클라이언트가 서버에게 원하는 컨텐츠의 선호도를 나타내는 요청 헤더를 포함시킵니다.
- 서버는 클라이언트의 요청을 기반으로 가장 적합한 컨텐츠를 선택하고 응답합니다.
- 서버는 선택된 컨텐츠와 함께 응답을 반환합니다.
HTTP 콘텐츠 협상 헤더 (HTTP Content Negotiation Header)
서버는 클라이언트의 컨텐트 협상 헤더를 분석하고, 이를 기반으로 가장 적합한 컨텐츠를 선택하여 서버는 "Content-Type", "Content-Language", "Content-Encoding" 등의 헤더를 사용하여 실제로 제공되는 컨텐츠의 속성을 클라이언트에게 알립니다.
- Accept: 클라이언트가 원하는 콘텐츠 유형을 나타냅니다. 이 헤더를 사용하여 클라이언트는 원하는 미디어 타입, MIME 유형, 확장자 등을 서버에 전달할 수 있습니다. ex) "Accept: application/json"은 클라이언트가 JSON 형식의 응답을 선호한다는 것을 나타냅니다.
- Accept-Language: 클라이언트가 원하는 언어를 나타냅니다. 이 헤더를 사용하여 클라이언트는 서버에게 선호하는 언어를 알릴 수 있습니다. ex) "Accept-Language: en-US"는 클라이언트가 영어(미국)을 선호한다는 것을 의미합니다.
- Accept-Encoding: 클라이언트가 지원하는 인코딩 방식을 나타냅니다. 이 헤더를 사용하여 클라이언트는 서버에게 압축, 인코딩 등의 지원 가능한 방식을 알릴 수 있습니다. ex) "Accept-Encoding: gzip, deflate"는 클라이언트가 Gzip 또는 Deflate 압축을 지원한다는 것을 의미합니다.
- Accept-Charset: 클라이언트가 지원하는 문자 집합을 나타냅니다. 이 헤더를 사용하여 클라이언트는 서버에게 선호하는 문자 인코딩을 전달할 수 있습니다.
'CS > Network' 카테고리의 다른 글
[ Web Server ] 아파치 (Apache)란 무엇일까? (0) | 2023.09.01 |
---|---|
[ HTTP ] 리다이렉션(REDIRECTION)이란 무엇일까?! (0) | 2023.07.04 |
[ HTTP ] HTTP 상태코드 들을 알아보자 (0) | 2023.07.04 |
[ HTTPS ] HTTPS란 무엇일까? (0) | 2022.11.17 |
[네트워크] REST API(Representational State Transfer)의 이해 (1) | 2022.10.04 |