본문으로 건너뛰기
SoulLog

HTTP 헤더1 - 일반 헤더

7분 읽기

HTTP 헤더

용도

  • HTTP 전송에 필요한 모든 부가정보를 포함합니다.
  • 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보 등을 담고 있습니다.
  • 표준 헤더가 많고, 필요 시 임의의 헤더를 추가할 수 있습니다.

분류 - RFC2616 (과거)

General 헤더

메시지 전체에 적용되는 정보입니다.

  • Connection: close

Request 헤더

요청 정보입니다.

  • User-Agent: Mozilla/5.0 (Macintosh; …)

Response 헤더

응답 정보입니다.

  • Server: Apache

Entity 헤더

엔티티 바디 정보입니다.

  • Content-Type: text/html, Content-Length: 3423

HTTP BODY - message body (RFC2616, 과거)

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
  <body>...</body>
</html>
  • 메시지 본문은 엔티티 본문을 전달하는 데 사용합니다.
  • 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터입니다.
  • 엔티티 헤더는 엔티티 본문의 데이터를 해석할 수 있는 정보를 제공합니다.
    • 데이터 유형(html, json), 데이터 길이, 압축 정보 등

RFC723x 변화

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

HTTP BODY - message body (RFC7230, 최신)

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
  <body>...</body>
</html>
  • 메시지 본문(페이로드)을 통해 표현 데이터를 전달합니다.
  • 표현은 요청이나 응답에서 전달할 실제 데이터입니다.
  • 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공합니다.
    • 데이터 유형(html, json), 데이터 길이, 압축 정보 등
  • 참고: 표현 헤더는 표현 메타데이터와 페이로드 메시지를 구분해야 하지만, 여기서는 생략합니다.

표현

표현 헤더는 전송, 응답 둘 다 사용합니다.

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 — 클라이언트가 선호하는 자연 언어입니다.

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

Quality Values(q) 값을 사용합니다.

1. 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
  • q 값이 없을 경우에는 매칭이 정확한지를 따져서 우선순위를 잡는다는 의미로 볼 수 있습니다.
+-------------------+---------------+
| Media Type        | Quality Value |
+-------------------+---------------+
| text/html;level=1 | 1             |
| text/html         | 0.7           |
| text/plain        | 0.3           |
| image/jpeg        | 0.5           |
| text/html;level=2 | 0.4           |
| text/html;level=3 | 0.7           |
+-------------------+---------------+

전송 방식

단순 전송

컨텐츠의 길이를 알 수 있을 때 사용합니다.

압축 전송

Content-Encoding으로 압축된 형태가 추가되어야 합니다.

분할 전송

용량이 큰 경우 한 번에 보내면 시간이 오래 걸리지만, 분할해서 보낼 경우 바로바로 받아볼 수 있습니다.

분할 전송을 보낼 경우에는 Content-Length는 사용할 수 없습니다.

  • 보낼 때 길이가 가늠이 안 됩니다.

범위 전송

Content-Range로 바이트 범위를 설정할 수 있습니다.


일반 정보

From

유저 에이전트의 이메일 정보입니다.

  • 일반적으로 잘 사용되지 않습니다.
  • 검색 엔진 같은 곳에서 주로 사용합니다.
  • 요청 시 사용합니다.

Referer

이전 웹 페이지 주소입니다.

  • 현재 요청된 페이지의 이전 웹 페이지 주소입니다.
  • A → B로 이동하는 경우, B를 요청할 때 Referer: A를 포함해서 요청합니다.
  • Referer를 사용해서 유입 경로 분석이 가능합니다.
  • 요청에서 사용합니다.