HTTP 헤더
- HTTP 전송에 필요한 모든 부가 정보
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등
- 필요시 임의 헤더 추가 가능하다
RFC2616(과거)
- General 헤더 : 메시지 전체 적용 정보
- Request 헤더 : 요청 정보
- Response 헤더 : 응답 정보
- Entity 헤더 : 엔티티 바디 정보(Content-Type, Content-length), 실제 메시지 body에 들어가는 내용
HTTP Body(message body - RFC2616)
- 메시지 본문은 엔티티 본문을 전달하는 데 사용
- 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터
- 엔티티 헤더는 엔티티 본문의 데이터를 해석할 수 있는 정보 제공(데이터 유형 html, json), 데이터 길이 등
RFC7230~7235 등장
- 엔티티 (Entity) -> 표현(Representation)
- 메시지 본문(payload)을 통해 표현 데이터 전달
- 표현은 요청이나 응답에서 전달할 실제 데이터
- 표현 헤더(Contenct-Type, Content-Length 등등) 는 표현 데이터를 해석할 수 있는 정보를 제공한다.
왜 표현이라 말하나?
- 클라이언트와 서버간의 통신 시 리소스를 실제 데이터가 HTTP로 전송을 할 때는 HTML or JSON 등등의 타입으로 전달할 수 있다. 실제 전달하는 것을 표현이라고 명확하게 정의했다.
표현 헤더(전송, 응답 둘다 사용)
(1) Content-Type: 표현 데이터의 형식
: 미디어 타입, 문자 인코딩
(2) Content-Encoding: 표현 데이터의 압축 방식
: 표현데이터를 압축하기 위해 사용
: 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가
: 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제
(3) Content-Language: 표현 데이터의 자연 언어
: ko, en, en-Us 등등
(4) Content-Length: 표현 데이터의 길이
: 바이트 단위
: Transfer-Encoding(전송 코딩)을 사용하면 Content-Lengh를 사용하면 안됨
협상 헤더(콘텐츠 네고시에이션)
- 클라이언트가 선호하는 표현 요청
- 요청 시에만 사용
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset : 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language : 클라이언트가 선호하는 자연 언어
EX) 한국어 브라우저를 사용해 다중 언어 지원이 가능한 서버에 접속을 하면 한국어로 보내줄 수 있다.
- 요청 : Accet-Lanauge : ko
- 응답 : Content-Language:de
EX) 복잡한 예시
- 다중 언어 지원 서버가 기본이 독일어(de), 영어 지원(en) but 한국어 지원 안 할 때
- 한국어가 없다면, 차라리 독일어보다 영어로 받고 싶다!!!
> 우선순위가 필요함, 우선순위대로 표시됨
협상과 우선순위 1
- Quality Values(q) 값 사용
- 0~1, 클수록 높은 우선순위
(1) ko-KR;(q=1 생략)
(2) ko;q=0.9
(3) en.US;q=0.8
(4) en;q=0.7
협상과 우선순위 2 - 구체적인 것이 우선
1. text/plainlformat=flowed
2. text/plain
3. text/*
4. */*
협상과 우선순위 3 - 구체적인 것을 기준으로 미디어 타입을 맞춘다
헤더 전송 방식
- 단순 전송
: 요청을 하면 응답을 줄 때
: Content-length 길이 값을 전달(콘텐츠의 길이를 알떄)
- 압축 전송
: 서버에서 압축을 하면, 용량이 줄어든다
: Content-Encoding 정보를 추가로 전달한다.
- 분할 전송(Transfer-Encoding)
: Transfer-Encoding : chunked
: 덩어리로 분할해서 전송한다
: 데이터 클 때 분할해서 보내면 바로바로 보여줄 수 있다.
: Content-length를 보내면 안됨
Ex) 5 Hello / 5 Worled / 0 \r\n (끝)
- 범위 전송
: 이미지를 받을 때, 갑자기 끊긴다면? 처음부터 다시 한다.
: 방지하기 범위를 지정해서 전달한다
: Content-Range: bytes 1001~2000 / 2000
REFERENCE
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
김영한 님 강의 정리 내용입니다.
'기타 > HTTP' 카테고리의 다른 글
[HTTP] 상태 코드 (0) | 2021.08.01 |
---|---|
[HTTP] HTTP 메서드 (0) | 2021.07.23 |
[HTTP] HTTP(HyperText Transter Protocol) 기본 (0) | 2021.07.21 |
URI와 웹 브라우저 요청 흐름 알아보기 (0) | 2021.07.21 |
[HTTP] 인터넷 네트워크 (잡한 인터넷 망에서 데이터를 어떻게 보낼까?) (0) | 2021.07.21 |