표현은 무엇일까?
표현은 요청이나 응답에서 전달할 실제 데이터를 뜻한다.
따라서 표현 데이터는 실제 데이터를 의미하고 페이로드(payload)라고도 한다.
표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다.
표현 헤더는 어떻게 쓸까?
표현 헤더는 HTTP 헤더의 일종으로, 형식이 같다.
<field-name>:<field-value> //field-name은 대소문자 구분없음 주의!
표현 헤더에는 어떤게 있을까?
위 예시와 같이 표현 헤더에는 `Cotent-Type`과 `Content-Length`같은 부가정보를 담는다.
이 외에도 메시지 바디의 내용, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등등이 있다.
임의의 헤더 추가도 가능하다!
그저 데이터의 부가정보를 담는 헤더이므로 요청, 응답 둘 다 사용한다.
- Content-Type: 표현 데이터의 형식
- 미디어 타입, 문자 인코딩을 표현한다.
Content-Type: Text/html;charset=utf-8
Content-Type: application/json
Content-Type: Image/png
Content-Encoding: gzip
Content-Encoding: deflate
Content-Encoding: identity
- Content-Language: 표현 데이터의 자연 언어
- 표현 데이터의 자연 언어를 표현
Content-Language: ko
Content-Language: en
Content-Language: en-US
- Content-Length: 표현 데이터의 길이
- 바이트 단위
- Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안됨. 왜냐? chuncked 방식으로 데이터를 분할하여 보내기 때문에 전체 데이터의 크기를 알 수 없기 때문이다.
Content-Length: 5
콘텐츠 협상은 무엇일까?
쉽게 말하면 사용자가 원하는 데이터의 종류를 서버에 요청할 수 있게 지정해 놓은 헤더이다.
예를 들어 난 한국어로 된 문서가 읽기 편하다고 했을때 "웬만하면 웹페이지는 한국어로 주세요~"라고 서버에게 말하는 것이다.
당연히 클라이언트의 입맛에 맞게 요청하는 것이므로 요청시에만 사용한다.
콘텐츠 협상 헤더는 어떻게 쓸까?
이 또한 HTTP 헤더이므로 형식은 같다.
콘텐츠 협상에는 어떤게 있을까?
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
콘텐츠 협상 우선순위 설정?
나는 한국어를 선호하기에 `Accept-Language: ko`를 헤더로 서버에 요청했다.
그러나 서버가 독일어와 영어밖에 지원하지 않는다.
그런데 나는 독일어를 하나도 모르니 차라리 영어로 받고싶을 때, 우선순위를 적용할 수 있다.
Get /event
Accept-Language:ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
우선순위 q 값은 0~1 값을 가지고 클수록 높은 우선순위에 있음을 나타낸다. 따라서 위의 헤더를 분석하면
1. ko-KR;q=1
2. ko;q=0.9
3. en-US;q=0.8
4. en;q=0.7
1,2,3,4 순으로 클라이언트가 해당 언어를 선호하는 것을 알 수 있다.
컨텐츠 협상에 대하여 더 알아보기
Content negotiation - HTTP | MDN
HTTP에서, 컨텐츠 협상이란 동일한 URI에서 리소스의 서로 다른 버전을 서브하기 위해 사용되는 메커니즘으로, 사용자 에이전트가 사용자에게 제일 잘 맞는 것이 무엇인지(예를 들어, 문서의 언어
developer.mozilla.org
'서버지식 > 웹 서비스' 카테고리의 다른 글
[HTTP]Remote Address (0) | 2022.02.23 |
---|---|
[HTTP]네이버를 통해 쿠키역할 배우기 (0) | 2022.02.23 |
[HTTP]실제 네트워크를 보고 유추해보자 (0) | 2022.02.23 |
[웹 서비스]HTTP 주요 헤더 (0) | 2022.02.23 |
[웹 서비스]HTTP 쿠키 (0) | 2022.02.23 |