HTTP 헤더에는 클라이언트가 원하는 타입의 컨텐츠를 요구할 수 있는 Accept 속성이 있습니다. 이에 대해 알아봅니다.
[ Contents ]
1. 컨텐츠 협상 (Contents Negotiation)
클라이언트가 원하는 컨텐츠 타입을 서버에게 요청
클라이언트는 서버에게 원하는 리소스(컨텐츠)를 요청하고, 서버로부터 응답 받습니다.
그런데 같은 미디어라고 해도 형식이 여러가지고, 같은 내용이라고 해도 인코딩과 언어가 다를 수 있겠죠. 그래서 Header에 자세히 원하는 컨텐츠의 종류를 명시하며, 이를 컨텐츠 협상이라고 합니다.
2. 협상 종류
Accept: (클라이언트에서 원하는) 미디어 타입
Accept-Charset: (클라이언트에서 원하는) 문자 인코딩
Accept-Encoding: (클라이언트에서 원하는) 압축 인코딩
Accept-Language: (클라이언트에서 원하는) 자연어 (ko, en 등)
컨텐츠 협상 종류에는 미디어 타입, 문자/압축 인코딩, 언어 등이 있습니다.
가끔씩 페이지가 깨져서 나올 때가 있는데, 이는 클라이언트에서 디코딩할 수 없는 컨텐츠 형식을 보냈기 때문입니다. 클라이언트는 원하는 컨텐츠 형식대로 보내줄 것을 요청하지만, 없을 경우 서버에서 기본값을 설정한 임의의 컨텐츠로 보내게 됩니다.
3. 협상 우선순위
GET /search
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Quality Values(q)를 사용하여 어떤 형식을 더 원하는지 우선순위를 부여할 수 있습니다. q는 0부터 1까지 지정할 수 있으며, 클수록 높은 우선순위입니다.
백분율이 아니기 때문에 굳이 합을 1로 맞출 필요는 없으며 우선순위대로 대소관계만 고려하면 됩니다. 서버는 클라이언트의 협상 우선순위대로 가능한 응답을 보내줍니다.
예를 들어 한국 ip로 접속할 경우, Accept-Language는 보통 한국어 - 미국식 영어 - 유럽식 영어 순으로 우선순위가 부여됩니다.
우선순위가 없는 경우에는 CSS와 비슷하게 구체적인 타입 순으로 배정됩니다. text/* 와 text/html 중에서는 text/html이 우선순위가 높습니다.
'CS > 데이터통신 & 네트워크' 카테고리의 다른 글
[네트워크] 쿠키의 정의와 쓰임: Set-Cookie, Cookie 헤더 해석 (0) | 2023.07.11 |
---|---|
[네트워크] HTTP 헤더: Referer, User-Agent, Server, Host (0) | 2023.07.11 |
[네트워크] HTTP 상태코드: 200, 201, 204, 301, 302, 303, 304, 307, 308, 400, 401, 403, 404, 500, 503 (1) | 2023.07.10 |
[네트워크] HTTP 메서드의 속성: 안전, 멱등, 캐시가능 (0) | 2023.07.10 |
[네트워크] HTTP 메서드: GET, POST, PUT, PATCH, DELETE (0) | 2023.07.10 |
댓글