Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

HTTP Header - 일반 헤더 본문

Web/HTTP

HTTP Header - 일반 헤더

studyHub 2021. 5. 31. 20:56

앞서 HTTP 메시지는 Start line - Header - Body로 이루어진다고 했다.

2021.05.17 - [Web/HTTP] - HTTP 기본

HTTP 헤더에 들어갈 수 있는 표준 헤더 field가 참 많은데, 오늘은 가장 기본이 되는 것부터 알아보겠다.

 


 

HTTP Header 개요

표현(Representation)

요청이나 응답에서 전달할 실제 데이터. 리소스를 표현한 것.

표현이라 하는가?

HTTP 메시지를 통해 전달할 데이터는 리소스를 HTML, JSON 등으로 '표현' 이므로.

 

Representation = Representation Metadata + Representation Data

HTTP 메시지는 Representation을 전달한다.

HTTP Body

메시지 본문(message body) 통해 Representation Data 전달

메시지 본문 = payload (실어 나를 실제 데이터부)

 

HTTP Header

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

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

# 구조

header-field = field-name: field-value

field-name 대소문자 구분이 없다

 

# 헤더 분류

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

  • Request 헤더: 요청 정보
    ) User-Agent: Mozilla/5.0

  • Response 헤더: 응답 정보
    ) Server: Apache

  • Representation 헤더: Representation Data 해석할 있는 정보 제공
    ) 데이터 유형(html, json), 데이터 길, 압축 정보 등등
    Representation Data를 해석할 수 있는 정보 제공

필요시 임의의 헤더를 추가할 수도 있다.

※ 브라우저 검사 탭에서 보이는 것은 HTTP 헤더를 구분하는 것이 아니다.

여기서 Response, Request Header는..

여기서 Request Headers는 HTTP 요청 시점에 보낸 헤더 모음, Response Headers는 응답시점에 받은 헤더들의 모음.

 


Representation 헤더

 

  • Content-Type: 표현 데이터의 형식 설명 (미디어 타입, 문자 인코딩)
    예) text/html; charset=utf-8, application/json, image/png
  • Content-Encoding: 표현 데이터의 압축 방식
    - 데이터를 전달하는 곳에서 압축 인코딩 헤더 추가
    - 데이터를 읽는 곳에서 인코딩 헤더의 정보로 압축 해제
    ) gzip, deflate, identity(압축 x)압축
  • Content-Language: 표현 데이터의 자연 언어
    ) ko, en, en-US

  • Content-Length: 표현 데이터의 길이 (바이트 단위
    Transfer-Encoding 사용하면 Content-Length 사용하면 안됨(포함하고 있음)

 


일반 정보성 헤더

# 요청에서 사용

  • From: 유저 에이전트의 이메일 정보
  • Referer: 이전 페이지의 주소
    현재 요청된 페이지의 이전 페이지 주소로, Referer 통해 유입 경로 분석 가능
    (A → B 이동하는 경우, B 요청할 Referer: A를 포함해서 요청)

  • User-Agent: 유저 에이전트(클라이언트의 애플리케이션) 정보
    어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능

# 응답에서 사용

  • Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
    ex) Server: Apache/2.2.22 (Debian)

  • Date: 메시지가 발생한 날짜와 시간

 


협상(Contents negotiation)과 관련 헤더

클라이언트가 선호하는 표현을 명시해서 요청하면 서버가 최대한 맞춰준다.

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

  • Accept: 클라이언트가 선호하는 Content-type
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어

영어보단 한국어를 선호합니다 → 한국어가 있으니 드리겠습니다

그런데 한국어가 없으면?

한국어를 선호합니다. (그 다음 선호는 영어) → 한국어가 없으니 기본 값인 독일어로 드리겠습니다.

협상과 우선순위

1. Quality Values(q) 사용

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

2. 구체적인 것이 우선한다

) Accept: text/*, text/plain, text/plain;format=flowed, */*

    text/plain;format=flowed > text/plain > text/* > */*

 

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

    text/html text/html;q=0.7 해당되고,

    text/plain text/*;q=0.3 해당되며,

    image/jpeg */*;q=0.5 해당된다.

 


전송 방식과 관련 헤더

1. 단순 전송

  한 번에 표현을 다 전송

 

2. 압축 전송

   압축해서 용량을 줄여 전송

   무엇으로 압축했는지 보내야 받는 쪽에서 압축 해제할 수 있다 : Content-Encoding

3. 분할 전송

   chunk 단위로 쪼개서 보낸다.

   용량 큰 데이터를 다 기다릴 필요 없이 먼저 오는 것부터 표시할 수 있다

4. 범위 전송

   예를 들어 대용량 이미지를 받는 도중에 연결이 끊겼을 경우, 처음부터 받는 낭비다.

   절반은 받았으니 나머지 절반만 달라고 요청 있다

/2000: 전체 끝 길이

 


특별한 정보를 제공하는 헤더

# 요청에서 사용

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

    필요한
    상황: 하나의 IP, 하나의 서버가 여러 도메인을 처리해야
    ) 가상호스트를 통해 여러 도메인을 한번에 처리할 있는 서버. 실제 애플리케이션이 여러개 구동될 있다.

어떤 도메인으로 연결해야 하는지 알 수 없다
Host 헤더를 통해 도메인 정보를 명시해줌으로써 해결된다



# 응답에서 사용

  • Location: 페이지 리다이렉션
    3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동(리다이렉트)
    201(Created) 응답의 경우,  Location 값은 요청에 의해 새로 생성된 리소스의 URI

  • Allow: 허용 가능한 HTTP 메서드
    405(Method Not Allowed) 응답에 포함해야
    ex) Allow: GET, HEAD, PUT

  • Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
    503(Service Unavailable) 응답에, 서비스가 언제까지 불능인지 알려줄 있다
    ex) Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (날짜 표기) / Retry-After: 120 (초단위 표기)

 


인증 관련 헤더

  • Authorization: 클라이언트 인증 정보를 서버에 전달
    ex) Authorization: Basic xxxxxxxxxxxxxxxx
    인증 메커니즘(Oauth )마다 value 값이 다르다
  • WWW-Authenticate: 리소스 접근시 필요한 인증 방법 정의 (이걸 참고해서 제대로 된 인증정보를 만들어!)
    401(Unauthorized) 응답과 함께 사용한다.
    ex) WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"", Basic realm="simple"

쿠키 관련 헤더

  • Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답 )
  • Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 쿠키를 서버로 전달

 

 


참고 자료 & 이미지 출처
모든 개발자를 위한 HTTP 웹 기본 지식 (김영한 님)
컴퓨터 네트워킹 : 하향식 접근 7판 (JAMES F.KUROSE)

'Web > HTTP' 카테고리의 다른 글

HTTP Header - 캐시와 조건부 요청  (0) 2021.05.31
HTTP 상태 코드  (0) 2021.05.28
HTTP 메서드 활용  (0) 2021.05.24
HTTP 메서드  (0) 2021.05.24
HTTP 기본  (0) 2021.05.17