컴퓨터 네트워크/응용계층

HTTP 헤더 (HTTP Headers)

iOS Developer 2025. 1. 12. 14:29

HTTP 헤더 (HTTP Headers)

HTTP 헤더는 클라이언트와 서버 간의 통신을 위한 추가 정보를 전달하기 위해 사용됩니다. 요청(Request) 및 응답(Response) 메시지의 메타데이터 역할을 하며, 메시지의 처리를 세부적으로 제어하거나 상태를 전달하는 데 중요한 역할을 합니다.

이 글에서는 HTTP 요청 시, 응답 시, 그리고 요청과 응답 모두에서 활용되는 주요 HTTP 헤더를 체계적으로 살펴보겠습니다.


HTTP 요청(Request) 시 활용되는 헤더

HTTP 요청 메시지는 클라이언트가 서버에게 특정 작업을 요청할 때 사용되며, 다음과 같은 헤더를 포함할 수 있습니다.


1. Host

Host 헤더는 요청 대상 호스트(도메인 네임 및 포트 번호)를 명시합니다. 이는 하나의 IP 주소에서 여러 도메인을 운영하는 가상 호스팅(Virtual Hosting) 환경에서 특히 중요합니다.

예시:

GET /index.html HTTP/1.1
Host: www.example.com

역할:

  • 서버가 요청의 대상 호스트를 식별할 수 있도록 도와줍니다.
  • HTTPS 요청 시에도 필수로 사용됩니다.

image

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)


2. User-Agent

User-Agent 헤더는 요청을 생성한 클라이언트(예: 브라우저, API 클라이언트 등)의 소프트웨어 정보를 제공합니다. 이 정보는 서버가 클라이언트의 환경에 맞춰 콘텐츠를 최적화하거나, 특정 브라우저와의 호환성을 위해 유용합니다.

포함 정보:

  • 브라우저 이름 및 버전
  • 운영체제 정보
  • 렌더링 엔진 정보

예시:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36

image

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)


3. Referer

Referer 헤더는 클라이언트가 요청을 보낼 때 이전 페이지의 URL(유입 경로)을 명시합니다. 이를 통해 서버는 트래픽 소스를 분석하거나 리퍼러 기반의 콘텐츠 제공을 수행할 수 있습니다.

예시:

Referer: https://www.google.com/

참고:

영문법상 "Referrer"가 맞지만, 초기 표준화 과정에서 오타로 인해 "Referer"가 사용되고 있습니다.

image

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)


4. Authorization

Authorization 헤더는 클라이언트의 인증 정보를 서버에 전달하는 데 사용됩니다. 서버는 이 정보를 바탕으로 클라이언트의 요청을 허가할지 결정합니다.

인증 유형:

  1. Basic Authentication: 사용자 ID와 비밀번호를 Base64로 인코딩.
  2. Bearer Token: API 토큰 사용.
  3. OAuth: 외부 인증 서비스 활용.

예시:

Authorization: Basic bWluY2h1bDoxMjM0

image

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)


HTTP 응답(Response) 시 활용되는 헤더

HTTP 응답 메시지는 서버가 클라이언트의 요청에 대해 결과를 반환할 때 사용됩니다. 주요 응답 헤더는 다음과 같습니다:


1. Server

Server 헤더는 요청을 처리한 서버 소프트웨어의 정보를 제공합니다.

예시:

Server: Apache/2.4.41 (Ubuntu)

image


2. Allow

Allow 헤더는 클라이언트에게 요청 가능한 HTTP 메서드를 명시합니다. 주로 상태 코드 405(Method Not Allowed)와 함께 사용됩니다.

예시:

Allow: GET, POST, HEAD

image


3. Retry-After

Retry-After 헤더는 서버가 현재 요청을 처리할 수 없을 때, 클라이언트에게 재시도 가능한 시점을 알립니다.

예시:

Retry-After: 120

image


4. Location

Location 헤더는 리다이렉션 또는 자원 생성 시 새로운 자원의 URL을 제공합니다.

예시:

Location: https://www.example.com/new-resource

5. WWW-Authenticate

WWW-Authenticate 헤더는 서버가 클라이언트에게 인증 방식을 요구할 때 사용됩니다. 주로 상태 코드 401(Unauthorized)와 함께 사용됩니다.

상태 코드 401(Unauthorized)는 요청한 자원에 대한 유효한 인증이 없을 때 응답하는 코드임. 상태 코드 401(Unauthorized)과 함께 사용되는 헤더가 WWW-Authenticate임. WWW-Authenticate 헤더는 자원에 접근하기 위한 인증 방식을 설명하는 헤더임. 이를 테면 다음 그림과 같이 Basic 인증을 요구할 수 있음.

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)

다만 실제로는 이보다 조금 더 많은 정보를 알려 주는 경우가 많음. 예를 들어, 다음과 같이 보안 영역(realm)을 함께 알려주거나 인증에 사용될 문자집합(charset)도 알려 줄 수 있음.

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)

앞서 Authorization 헤더를 배웠음. 이 헤더는 클라이언트가 서버에게 전송하는, 인증 정보를 담는 헤더라고 했음. Authorization과 WWW-Authenticate 헤더를 통해 인증되지 않은 클라이언트가 HTTP 인증(Basic 인증)을 수행하는 과정을 그림과 함께 살펴보자.

  1. 인증되지 않은 클라이언트가 서버에 GET 요청 메시지를 전송함.
  2. 서버는 클라이언트에게 상태 코드 401(Unauthorized)과 함께 WWW-Authenticate 헤더를 통해 인증 방식을 알림.
  3. 클라이언트는 사용자로부터 인증 정보(사용자 아이디와 비밀번호)를 전달받음.
  4. "사용자 아이디:비밀번호"를 Base64 인코딩한 값을 인증 정보로 삼은 Authorization 헤더를 통해 다시 GET 요청 메시지를 전송함.
  5. 서버는 인증 정보를 확인함.
  6. 인증이 유효하면 상태 코드 200으로 응답하고, 인증되지 않았으면 상태 코드 401로 응답함.

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)

예시:

WWW-Authenticate: Basic realm="User Login"

요청과 응답 모두에서 활용되는 헤더


1. Date

Date 헤더는 메시지가 생성된 날짜와 시간을 나타냅니다.

예시:

Date: Tue, 15 Nov 2022 08:12:31 GMT

2. Connection

Connection 헤더는 클라이언트와 서버 간의 연결 상태를 명시합니다.

  • keep-alive: 연결을 지속.
  • close: 연결을 종료.

예시:

Connection: keep-alive

image


3. Content-Length

Content-Length 헤더는 HTTP 메시지 본문의 크기를 바이트 단위로 명시합니다.


4. Content-Type

Content-Type 헤더는 메시지 본문의 데이터 유형(미디어 타입)을 나타냅니다.

예시:

Content-Type: text/html; charset=UTF-8

5. Content-Language

Content-Language 헤더는 메시지 본문에 사용된 자연어를 명시하며, 값은 언어 태그 형식을 따릅니다. 언어 태그는 하이픈(-)으로 구분되며, en 또는 ko처럼 첫 번째 서브 태그만 사용되거나, en-US, ko-KR처럼 두 번째 서브 태그까지 포함될 수 있습니다.

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)

첫 번째 서브 태그는 언어 코드로, 특정 언어를 의미하는 언어 코드가 명시됨. 주로 사용되는 언어 코드는 다음과 같습니다.

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)

두 번째 서브 태그는 국가 코드로, 특정 국가를 의미하는 국가 코드가 명시됩니다.

(그림 출처: 혼자 공부하는 컴퓨터 네트워크)

언어 코드와 국가 코드를 조합하면 특정 국가에서 사용되는 특정 언어를 나타낼 수 있습니다. 예를 들어, ko는 한국어, ko-KR는 한국에서 사용하는 한국어, en은 영어, en-US는 미국 영어, en-GB는 영국 영어를 의미합니다.

6. Content-Encoding

Content-Encoding 헤더는 메시지 본문의 압축 또는 변환 방식을 명시하며, 이를 통해 데이터 전송 속도를 개선합니다. 수신 측은 해당 값을 사용해 데이터를 해제하거나 원문으로 변환합니다. 주요 값으로는 gzip, compress, deflate, br 등이 있습니다.

요약

HTTP 헤더는 클라이언트와 서버 간 통신의 세부 사항을 제어하고 확장하는 강력한 도구입니다. 요청과 응답에서 적절한 헤더를 사용하는 것은 애플리케이션의 성능과 보안에 큰 영향을 미칩니다.

주요 HTTP 헤더 요약:

  1. Host: 요청 호스트 식별.
  2. User-Agent: 클라이언트 정보 제공.
  3. Referer: 유입 경로 제공.
  4. Authorization: 인증 정보 전달.
  5. Server: 서버 정보 명시.
  6. WWW-Authenticate: 인증 방식 요구.
  7. Content-Type: 본문 데이터 유형 명시.