본문 바로가기

기타/HTTP

HTTP 헤더1 - 일반 헤더

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
accept-language 헤더 우선 순위

- 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 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

 

김영한 님 강의 정리 내용입니다.

 

300x250