본문 바로가기
WEB

[WEB/HTTP] 07. HTTP 헤더 - 일반 헤더

by 상후 2021. 9. 12.
728x90
반응형

 

 

이 글은 인프런 강의 "모든 개발자를 위한 HTTP 웹 기본 지식" 을 학습하며 정리한 내용입니다.

저처럼 HTTP를 알고 싶거나, 겉핥기로 알고 있는 분들에게 위 강의를 추천합니다.

 

정리한 내용 중 틀린 내용이 있으면 지적해주시면 수정하겠습니다.


1. RFC723x

  • 표현(Representation)

표현 = 표현 메타데이터 + 표현 데이터

 

여기서 표현 데이터는 HTTP 메시지의 본문(BODY)을 의미합니다. → (실제 데이터)

표현 메타데이터는 HTTP 메시지의 본문(BODY)을 표현하는 정보 즉, 표현 데이터의 정보(메타 데이터)입니다.

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

 

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

표현 데이터 즉, 메시지 본문의 형식을 의미합니다.

html, json, xml, image 등이 존재합니다.

 

  • Content-Encoding : 표현 데이터 인코딩

표현 데이터를 압축하기 위해 사용합니다.

표현 데이터를 압축해서 사용한다면 인코딩 헤더를 추가합니다.

 

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

표현 데이터의 자연 언어를 표현

ko, en, en-US 등 

 

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

Byte 단위를 사용합니다.

표현 데이터의 길이를 의미하고, Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안 됩니다.


2. 협상(콘텐츠 네고시에시션) 

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

클라이언트가 요청할 때 선호하는 타입, 인코딩, 압축, 언어 등을 지정하여 요청하는 것을 의미합니다.

 

간단한 예로 다국어 지원이 가능한 서버에 한국어, 영어 등을 선호한다고 지정하여 요청하는 프로세스입니다.

그렇다면 서버는 해당 선호 요청을 보고 자신이 제공할 수 있는 표현을 제공합니다. 

 

- Accept : 클라이언트가 선호하는 미디어 타입 전달 (json, html 등)

- Accept-Charset : 클라이언트가 선호하는 문자 인코딩 (UTF-8 등)

- Accept-Encoding : 클라이언트가 선호하는 압축 인코딩 (gzip 등)

- Accept-Language : 클라이언트가 선호하는 자연 언어 (ko, en 등)

 

협상 헤더는 요청 시에만 사용합니다.

 

  • 협상과 우선순위 1 - Quality Values(q)

선호하는 타입 등을 1개만 지정할 수 있는 것은 아닙니다.

각 항목마다 우선순위(Quality Values) 값을 사용할 수 있습니다.

 

0~1, 숫자가 클수록 높은 우선순위

생략하면 1

 

Accept-Language : ko-KR,ko;q=0.9,en-US;q=0.8

ko-KR = ko-KR;q=1 : 우선순위(q)가 생략되었으므로 1, 최고 우선순위

ko;q=0.9 : 0.9의 우선순위

en-US;q=0.8 = 0.8의 우선순위

 

  • 협상과 우선순위 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 이면 0.7 의 quality를 갖게 된다

 


2. 전송 방식

  • 단순 전송(Content-Length)

헤더에 Content-Length를 추가하여 데이터를 한 번에 전송한다.

 

  • 압축 전송(Content-Encoding)

Content-Encoding 정보와 함께 데이터를 압축하여 전송한다. 이때 Content-Length를 당연히 감소한다.

 

  • 분할 전송(Transfer-Encoding)

데이터를 덩어리(chuncked)처럼 나눠 보낼 때 사용한다.

위에서 이야기한 Content-Length를 사용하면 안 되는 이유는 데이터를 분할하여 전송하기 때문에 전체 길이는 알 수 없다.

 

전송 예 : 5바이트의 Hello 분할 전송, 5바이트의 World 분할 전송, 종료

5

Hello

5

World

0

\r\n

 

  • 범위 전송(Range, Content-Range)

요청 헤더에서 Range: bytes=1001-2000 를 추가하여 요청하면

응답은 해당 범위 내의 데이터(표현)만 응답하고, 응답 헤더에는 Content-Range: bytes 1001-2000 / 2000 을 추가하여 응답한다.


3. 일반 정보

  • From : 유저 에이전트의 이메일 정보(주로 검색 엔진, 요청에서 사용) 
  • Referer : 이전 웹 페이지 주소(유입 경로 분석, 요청에서 사용)
  • User-Agent : 유저 에이전트 애플리케이션 정보(통계 정보, 브라우저 정보 등, 요청에서 사용)

 

  • Server : 요청을 처리하는 ORIGIN 서버 정보 (응답에서 사용)
  • Date : 메시지가 발생한 날짜와 시간(응답에서 사용)

4. 특별한 정보

  • Host : 요청한 호스트 정보(도메인)

요청에서 사용되며, 필수 값입니다.

 

하나의 서버(IP)에서 여러 도메인을 기동 중일 때를 고려합니다.

요청이 들어오면 어떤 도메인에 해당하는 요청인지 알아야 하기 때문입니다.

 

  • Location(페이지 리다이렉션)

3xx 응답에 Location 헤더가 있으면 해당 위치로 자동으로 이동합니다. (리다이렉트)

201 응답에서는 생성된 리소스 URI를 의미

 

  • Allow : 허용 가능한 HTTP 메서드

허용하지 않은 HTTP 메서드를 요청했을 때 405 (Method Not Allowed) 응답 시 포함해야 합니다.

Allow : GET, PUT 

 

  • Retry-After : 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

503 (Service Unavailable) : 서비스가 언제까지 불능인지 알려줄 수 있음


5. 인증

  • Authorization : 클라이언트 인증 정보를 서버에 전달

전달되는 데이터는 인증 방식마다 다릅니다.

Authorization : Basic xxxxxxxx

 

  • WWW-Authenticate : 리소스 접근 시 필요한 인증 방법 정의

401 Unatuhoized 응답과 함께 필요한 인증 방법을 정의합니다.

WWW-Authenticate : Newauth realm="apps", type=1 ... 생략

728x90
반응형

댓글