HTTP Header란?
HTTP메세지에 속해 있으며, HTTP 헤더 value에는 HTTP 전송에 필요한 모든 부가정보가 들어가있다. 임의의 헤더도 추가 가능 하지만 약속한 클라이언트랑 서버만 이해를 할 수 있다.
HTTP 헤더의 특징
- field-name은 대소문자 구문 없음
- 띄어쓰기 위치가 중요하다
- value는 대소문자를 구문한다
부가정보에는 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등등 많은 정보들이 있는데 수 많은 표준 헤더가 있기 때문에 아래 사이트를 보고 참고하는게 좋다
List of HTTP header fields - Wikipedia - 표준 헤더
HTTP 헤더의 역사
HTTP헤더의 역사는 크게 RFC2616, RFC723x로 나눌 수 있다. RFC2616는 과거에 사용되는 HTTP 프토토콜이며, 현재는 에는 사용하지 않는다. 반대로 RFC723x는 최근에 사용하고 있는 HTTP 프로토콜이다
RFC2616의 특징
RFC2616는 크게 총 4가지로 나눌 수 있다. 하지만 별로 중요하지 않는 내용 같으니 대충 넘어가겠슴돠
- General 헤더: 메시지 전체에 적용되는 정보
- Request 헤더: 요청 정보
- Response 헤더: 응답 정보
- Entity 헤더: 엔티티 바디 정보
RFC723x의 특징
- 메시지 바디(message body)을 통해 표현 데이터 전달
- 메시지 바디를 페이로드(payload)라고 부른다
- 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공
- 조금 풀어서 이야기 하자면 표현 헤더는 표현 데이터에 대한 데이터 타입, 데이터 길이, 압축 정보들을 제공한다
표현을 모르는 사람들은 '그래서 표현이 뭔데?' 라고 할 수 있다. 그래서 아래 자세한 내용을 적어두었다.
표현(representation)헤더 - 정보를 담은 부분
리소스를 클라이언트와 서버 간에 실제로 주고받을 때, 양쪽이 이해할 수 있는 형태로 데이터를 주고받아야 합니다. 이런 형태에 대한 정보를 가지고 있는 부분을 "표현(representation)"이라고 합니다. 따라서 표현 헤더는 리소스의 특정 표현을 설명하는 HTTP 헤더입니다.
표현 헤더 기본 속성
1. Content-Type(표현 데이터의 형식) - 데이터 타입, 인코딩에 대한 정보
2. Content-Encoding(표현 데이터 인코딩) - 표현 데이터를 압축하기 위해 사용
- 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해체
예)
- gzip
- deflate
- identity(압축을 안한다)
3. Content-Language(표현 데이터의 자연 언어) - 무슨 언어를 사용하는 지
4. Content-Length(표현 데이터의 길이)
- 바이트 단위를 사용
- Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안됨
컨텐츠 협상(네고시에이션) - 요청시에만 사용
클라이언트가 선호하는 표현을 요청하는 것
즉 클라이언트와 서버가 있을 때, 클라이언트가 원하는 표현을 서버에 요청을 말한다.
협상 헤더 종류
- Accept: 클라이언트가 선호하는 미디어 타입을 서버에게 달라고 요청하는것
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩을 서버에 달라고 요청하는것
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩을 서버에 달라고 요청하는것
- Accept-Language: 클라이언트가 선호하는 자연 언어를 서버에 달라고 요청하는것
※ 앞에 예시처럼 클라이언트가 원하는 표현을 서버가 못줄 수 도 있다. 즉 최대한 노력해달라고 말하는거다.
우선순위(Quality Values)
서버가 여러 언어를 지원할 경우, 단순하게 서버에서 지원하는 언어를 요청하면 되기 때문에 왠만한 경우는 문제가 없을 것이다. 하지만 서버에서 지원하지 않는 언어일 경우 그 다음 선호하는 최우선 언어로 설정할 필요가 있을 것이다. 예를 들어 클라이언트가 원하는 표현은 한국어인데 서버에서는 독일, 영어만 지원하면 서버는 기본 값인 독일어를 보여준다. 그렇다고 클라이언트는 독일어 보다 영어로 보이는게 좋을 때가 있다 이럴 때 우선 순위를 정할 수 있다.
협상 헤더 우선 순위 지정 방식 설명
- 기본 값은 1이다
- 범위는 0~1까지이고, 클수록 높은 우선 순위
- 단위는 q(Quality Valuesq)를 사용
- 구체적인 것이 우선순위가 높다
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
위에 코드를 해석해보면 우선 순위를 분석해보면
- ko-KR; - 1은 생략이 가능하므로 ko-KR이 1순위가 된다
- ko;q=0.9
- en-US;q=0.8
- en:q=0.7
참조: 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 헤더 캐시 이해하기 (1) | 2024.03.18 |
---|---|
[HTTP] 쿠키 이해하기- 파라미터 (1) | 2024.03.13 |
[HTTP] 상태 코드 - 상태 코드는 왜 필요할까? 및 종류 (0) | 2024.03.12 |
[HTTP] 웹 브라우저 요청 흐름 (0) | 2024.03.12 |
[HTTP] 인터넷과 네트워크 기본 개념(IP, TCP/UDP, PORT, DNS) (0) | 2024.03.12 |