HTTP

HTTP 헤더 개요 & 표현 및 컨텐츠 협상

느리지만 꾸준하게 2022. 4. 30. 18:36

HTTP 헤더 용도

 

  • HTTP 전송에 필요한 모든 부가정보

 

  • 예) 메시지 바디에 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보...

 

  • 표준 헤더가 너무 많다.

 

  • 필요시 임의의 헤더 추가 가능

 

 

헤더 분류

  • General 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close

 

  • Request 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh; ..)

 

  • Request 헤더: 응답 정보, 예) Server: Apache

 

  • Entity 헤더: 엔티티 바디 정보, 예) Content-Type: text/htm, Content-Length: 3423

 

 

  • 메시지 본문(message body)은 엔티티 본문(entity body)을 전달하는데 사용

 

  • 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터

 

  • 엔티티 헤더는 엔티티 본문의 데이터를 해석할 수 있는 정보 제공

 

  • 데이터 유형(html, json), 데이터 길이, 압축 정보 등등

 

 

 

HTTP 표준인 RFC2616 폐기 => RFC7239이 등장

 

RFC723x 변화

  • 엔티티(Entity) -> 표현(Representation)
  • Representation = representation Metadata + Representation Data
  • 표현 = 표현 메타데이터 + 표현 데이터

 

 

표현이라고 할까?

 

회원과 관련된 회원조회 html을 조회해준다. 회원이라는 리소스를 HTML로 표현을 한 것이다.

 

회원 데이터가 DB에 있는데 이걸 JSON으로 조회를 한다.

 

그러면 회원이라는 리소스를 실제 데이터가 HTTP에서 전송이 될 때는 HTML로 될 수도 있고 JSON으로 될 수도 있다.

 

그래서 실제 전달하는 걸 표현이라고 명확하게 정의를 했다.

 

 

 

표현

  • Content - Type: 표현 데이터의 형식

 

  • Content - Encoding: 표현 데이터의 압축 방식

 

  • Content - Language: 표현 데이터의 자연 언어

 

  • Content - Length: 표현 데이터의 길이

 

 

 

 

Content - Type

표현 데이터의 형식 설명

  • 미디어 타입, 문자 인코딩

 

  • 예)
  • text/html; charset = utf-8
  • application/json
  • image/png

 

Content-Encoding

  • 표현 데이터를 압축하기 위해 사용

 

  • 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가

 

  • 데이터를 읽는 쪽에서 이놐딩 헤더의 정보로 압축 해제

 

  • 예)
  • gzip
  • deflate
  • identity

 

 

 

 

Content-Language

표현 데이터의 자연 언어

  • 표현 데이터의 자연 언어를 표현
  • 예)
  • ko
  • en
  • en - US

 

 

Content-Length

표현 데이터의 길이

  • 바이트 단위
  • Transfer - Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안됨

 

 

 

 

협상(컨텐츠 네고시에이션)

클라이언트가 선호하는 표현 요청

 

  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept - Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept - Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept - Language: 클라이언트가 선호하는 자연 언어

 

  • 협상 헤더는 요청시에만 사용

 

 

Accept - Language 적용 전에는 영어로 응답이 오는데

적용 후에는 한국어로 응답이 오게 된다.

 

 

Content - Language를 독일어 말고 영어를 달라 그러면 우선순위가 필요하다!

 

 

협상과 우선순위1

 

Quality Values(q)

  • Quality Values(q) 값 사용
  • 0 ~ 1 , 클수록 높은 우선순위
  • 생략하면 1
  • Accept - Language: ko-KR, ko;q=0.9, en-US;q=0.8;en;q=0.7

 

  • 1. ko-KR;Q=1 (q 생략)
  • 2. ko;q=0.9
  • 3. en-US;Q=0.8
  • 4. en:q=0.7

 

 

 

보면 기본은 독일언데 저기서는 한국어를 원하네? 그 다음 쪽이 영어를 원하네

독일어 보다는 영어를 더 선호하는군 하면서 영어를 한국어 브라우저 사용하는 서버에게 보내준다.

 

 

협상과 우선순위2

  • 구체적인 것이 우선한다.
  • Accept: text/*, text/plain, text/plain;format=flowed, */*

1. text/plain;format=flowed

 

2. text.plain 

 

3. text/*

 

4. */*

 

 

협상과 우선순위3

  • 구체적인 것을 기준으로 미디어 타입을 맞춘다.
  • Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1,

    text/html;level=2;q=0.4, */*;q=0.5

 

 

 

 

 

 

 

<출처 김영한: 모든 개발자를 위한 HTTP 웹 기본 지식 >

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 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com