Intro
본 포스팅에서는 표현(Representation)과 협상(Negotiation)에 대해 다룬다.
표현
즉, 표현 헤더는 다양한 http header
로 이루어져 있는데 이는
header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
위와 같은 형태를 띄고, 표현 헤더는 하단의 표현 데이터(==메시지 본문, 바디, 본문)를 해석할 수 있는 대표 정보라고 해석할 수 있다.
표현 헤더의 구조
Content-Type : 표현 데이터의 형식
Content-Encoding: 표현 데이터의 압축 방식
Content-Language: 표현 데이터의 자연 언어
Content-Length: 표현 데이터의 길이
표현 헤더는 HTTP 요청, 응답 둘다 사용
Content-Type
표현 데이터의 형식을 설명한다.
- 미디어 타입, 문자 인코딩
- e.g.
- text/html; charset=utf-8
- application/json
- image/png
Content-Encoding
표현 데이터 인코딩 방식을 말한다.
- 표현 데이터를 압축하기 위해 사용되는 인코딩 방식이 무엇인지 설명한다.
- 데이터를 전달하는 곳에서 압축 후, 인코딩 헤더에 정보를 명시한다.
- 데이터를 읽는 쪽에서 인코딩 헤더의 정보를 기반으로 압축 해제
- e.g.
- gzip
- deflate
- identity
Content-Language
표현 데이터의 자연 언어가 무엇인지 설명한다.
- e.g.
- ko
- en
- en-US
Content-Length
표현 데이터의 길이를 의미한다.
- 바이트 단위이다.
- Transfer-Encoding(전송 코딩)을 사용하면 Content-Length 필드를 사용하지 않아야 한다.
협상 (콘텐츠 니고시에이션)
클라이언트가 선호하는 표현 방식을 의미한다.
Accept: 클라이언트가 선호하는 타입 전달
Accept-Charset: 클라이언트가 선호하는 문자 인코딩
Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
Accept-Language: 클라이언트가 선호하는 자연 언어
협상 헤더는 요청시에만 사용한다.
- 예제
요청
이렇게 요청이 들어오면, 영어(en)과 한국어(ko)를 지원하는 서버에서는 한국어로 응답을 보낼 수 있다.GET /event Accept-Language: ko
응답Content-Language:ko 안녕하세요
하지만 한국어를 요청했는데, 영어와 독어만 지원하는 서버의 경우는 어떻게 처리할까?
협상과 우선순위 1
- Quality Values(q)를 사용한다.
- 0~1, 클수록 높은 우선순위를 가진다.
- 생략하면 1
- e.g.
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
- ko-KR;q=1(q생략)
- ko;q=0.9
- en-US;q=0.8
- en;q=0.7
우선순위가 높은 것을 기반으로 서버가 선정하여 응답을 보낼 수 있다.
협상과 우선순위 2
- Quality Values(q)를 사용한다.
- 구체적인 것이 우선한다
- e.g.
Accept: text/*, text/plain, text/plain;format=flowed, *y*
- text/plain;format=flowed
- text/plain
- text/*
- /
더 구체적인 것을 기반으로 서버가 선정하여 응답을 보낼 수 있다.
협상과 우선순위 3
- Quality Values(q)를 사용한다.
- 구체적인 것을 기준으로 미디어 타입을 맞춘다.
- e.g.
Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1,text/html;level=2;q=0.4, */*;q=0.5
감사합니다.
Ref
모든 개발자를 위한 HTTP 웹 기본 지식, 인프런 김영한 강사님
'CS > Network' 카테고리의 다른 글
일반 정보, 특별한 정보 (0) | 2023.10.04 |
---|---|
HTTP 전송 방식 (0) | 2023.10.04 |
HTTP Header 개요 (0) | 2023.10.04 |
HTTP Status Code (0) | 2023.10.03 |
HTTP 메서드와 활용 (0) | 2023.10.03 |