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 요청 시에도 필수로 사용됩니다.
(그림 출처: 혼자 공부하는 컴퓨터 네트워크)
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
(그림 출처: 혼자 공부하는 컴퓨터 네트워크)
3. Referer
Referer 헤더는 클라이언트가 요청을 보낼 때 이전 페이지의 URL(유입 경로)을 명시합니다. 이를 통해 서버는 트래픽 소스를 분석하거나 리퍼러 기반의 콘텐츠 제공을 수행할 수 있습니다.
예시:
Referer: https://www.google.com/
참고:
영문법상 "Referrer"가 맞지만, 초기 표준화 과정에서 오타로 인해 "Referer"가 사용되고 있습니다.
(그림 출처: 혼자 공부하는 컴퓨터 네트워크)
4. Authorization
Authorization 헤더는 클라이언트의 인증 정보를 서버에 전달하는 데 사용됩니다. 서버는 이 정보를 바탕으로 클라이언트의 요청을 허가할지 결정합니다.
인증 유형:
- Basic Authentication: 사용자 ID와 비밀번호를 Base64로 인코딩.
- Bearer Token: API 토큰 사용.
- OAuth: 외부 인증 서비스 활용.
예시:
Authorization: Basic bWluY2h1bDoxMjM0
(그림 출처: 혼자 공부하는 컴퓨터 네트워크)
HTTP 응답(Response) 시 활용되는 헤더
HTTP 응답 메시지는 서버가 클라이언트의 요청에 대해 결과를 반환할 때 사용됩니다. 주요 응답 헤더는 다음과 같습니다:
1. Server
Server 헤더는 요청을 처리한 서버 소프트웨어의 정보를 제공합니다.
예시:
Server: Apache/2.4.41 (Ubuntu)
2. Allow
Allow 헤더는 클라이언트에게 요청 가능한 HTTP 메서드를 명시합니다. 주로 상태 코드 405(Method Not Allowed)와 함께 사용됩니다.
예시:
Allow: GET, POST, HEAD
3. Retry-After
Retry-After 헤더는 서버가 현재 요청을 처리할 수 없을 때, 클라이언트에게 재시도 가능한 시점을 알립니다.
예시:
Retry-After: 120
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 인증)을 수행하는 과정을 그림과 함께 살펴보자.
- 인증되지 않은 클라이언트가 서버에 GET 요청 메시지를 전송함.
- 서버는 클라이언트에게 상태 코드 401(Unauthorized)과 함께 WWW-Authenticate 헤더를 통해 인증 방식을 알림.
- 클라이언트는 사용자로부터 인증 정보(사용자 아이디와 비밀번호)를 전달받음.
- "사용자 아이디:비밀번호"를 Base64 인코딩한 값을 인증 정보로 삼은 Authorization 헤더를 통해 다시 GET 요청 메시지를 전송함.
- 서버는 인증 정보를 확인함.
- 인증이 유효하면 상태 코드 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
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 헤더 요약:
- Host: 요청 호스트 식별.
- User-Agent: 클라이언트 정보 제공.
- Referer: 유입 경로 제공.
- Authorization: 인증 정보 전달.
- Server: 서버 정보 명시.
- WWW-Authenticate: 인증 방식 요구.
- Content-Type: 본문 데이터 유형 명시.
'컴퓨터 네트워크 > 응용계층' 카테고리의 다른 글
쿠키(Cookie) (1) | 2025.01.14 |
---|---|
캐시(Cache) (0) | 2025.01.13 |
HTTP 상태 코드 (0) | 2025.01.07 |
HTTP 메서드 (0) | 2025.01.04 |
HTTP 메시지 구조 (0) | 2025.01.04 |