HTTP 헤더와 바디
Message body - RFC7230(최신)
메시지 본문(message body)을 통해 표현 데이터 전달
메시지 본문 = 페이로드(payload)
표현은 요청이나 응답에서 전달할 실제 데이터
표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공
데이터 유형(html, json), 데이터 길이, 압축 정보 등
HTTP 메시지는 헤더와 바디로 구분할 수 있습니다.
HTTP 바디에서는 데이터 메시지 본문(Message body)을 통해서 표현(Representation) 데이터를 전달합니다.
여기서 데이터를 실어 나르는 부분을 페이로드(Payload)라 합니다.
표현은 요청이나 응답에서 전달할 실제 데이터를 뜻하며 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공합니다.
HTTP 헤더의 형식
:
field-name은 대소문자 구분 없음
HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용합니다.
HTTP 전송에 필요한 모든 부가정보
e.g. 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 ...
표준 헤더가 너무 많음
필요 시 임의의 헤더 추가 가능
e.g. Helloworld: hihi
Content-Type: 표현 데이터의 형식
Content-Encoding: 표현 데이터의 압축 방식
Content-Language: 표현 데이터의 자연 언어
Content-Length: 표현 데이터의 길이
표현 헤더는 요청, 응답 둘 다 사용
Content-Type: 표현 데이터의 형식 설명
미디어 타입, 문자 인코딩
Text/html: charset=utf-8
application/json
Image/png
Content-Type: text/html;charset=UFT-8
Content-Type: application/json
Content-Encoding: 표현 데이터 인코딩
Content-Encoding: gzip
표현 데이터를 압축하기 위해 사용
데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
e.g. gzip, deflate, identity
Content-Language: 표현 데이터의 자연 언어
표현 데이터를 자연 언어로 표현
e.g. ko, en, en-US
Content-Language: ko
Content-Length: 표현 데이터의 길이 Content-Length: 5 바이트 단위
Transfer-Encoding은 전송 시 어떤 인코딩 방법을 사용할 것인가를 명시합니다.
그러나 현재는 Transfer-Encoding보다는 Content-Encoding을 사용하며, Transfer-Encoding을 사용하는 경우 chunked의 방식으로 사용합니다.
chunked 방식의 인코딩은 많은 양의 데이터를 분할하여 보내기 때문에 전체 데이터의 크기를 알 수 없기 때문에 표현 데이터의 길이를 명시해야 하는 Content-Length 헤더와 함께 사용할 수 없습니다.
Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안됨.
HTTP 주요 헤더
Requests <-> Response
일반적인 정보를 담고 있는 주요 헤더에 대해서 알아보겠습니다.
요청(Request)에서 사용되는 헤더
1. From: 유저 에이전트의 이메일 정보
일반적으로 잘 사용하지 않음
검색 엔진에서 주로 사용
요청에서 사용
응답(Response)에서 사용되는 헤더
1. Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
응답에서 사용
e.g.
Server: Apache/2.2.22 (Debian)
Server: nginx
Allow: 허용 가능한 HTTP 메서드
405(Method Not Allowed)에서 응답에 포함
e.g. Allow: GET, HEAD, PUT
Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
503(Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있음
e.g.
Retry-After: Fri, 31 Dec 2020 23:59:59 GMT(날짜 표기)
Retry-After: 120(초 단위 표기)