
HTTP Header란? 요청과 응답의 숨은 정보 이해하기
웹사이트나 API를 공부하다 보면 HTTP Header라는 말을 자주 보게 됩니다.
- HTTP Header란 뭘까?
- API 요청할 때 Header에는 왜 API Key를 넣을까?
- Content-Type, Authorization, User-Agent는 어디에 쓰는 걸까?
결론부터 말하면, HTTP Header는 요청과 응답에 함께 전달되는 부가 정보입니다.
우리가 브라우저에서 웹사이트에 접속하거나, Postman으로 API 테스트를 하거나, Python requests로 API 호출을 할 때도 Header는 계속 사용됩니다. 겉으로 보이는 본문 데이터가 아니라, 서버와 클라이언트가 서로 이해하기 위해 주고받는 “숨은 설명서”에 가깝습니다.
예를 들어 식당에서 음식을 주문한다고 생각해보면, 주문 내용은 Body이고 Header는 “포장 여부, 알레르기 정보, 결제 방식, 손님 정보” 같은 추가 요청사항이라고 볼 수 있습니다.
이번 글에서는 HTTP Header란 무엇인지, HTTP 요청 헤더와 응답 헤더의 차이, API Header 사용법, Python requests Header 예제, 자주 발생하는 오류 해결법까지 초보자 기준으로 쉽게 정리해보겠습니다.
HTTP Header란?
HTTP Header는 클라이언트와 서버가 HTTP 요청과 응답을 주고받을 때 함께 전달하는 부가 정보입니다.
쉽게 말하면, HTTP Header = 요청과 응답에 붙는 설명 정보 입니다.
예를 들어 API 요청을 보낼 때 이런 정보가 Header에 들어갈 수 있습니다.
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
User-Agent: Mozilla/5.0
각각의 의미는 다음과 같습니다.
| Header 이름 | 의미 |
|---|---|
| Authorization | 인증 정보 |
| Content-Type | 보내는 데이터 형식 |
| User-Agent | 요청을 보낸 프로그램 정보 |
| Accept | 받고 싶은 응답 형식 |
| Cache-Control | 캐시 처리 방식 |
즉, HTTP Header는 서버가 요청을 올바르게 이해하도록 도와주는 역할을 합니다.
API 호출이 실패했을 때 URL이나 Body만 확인하는 경우가 많지만, 실제 원인은 Header 설정 문제인 경우도 많습니다.
HTTP Header는 왜 필요할까?
HTTP Header가 필요한 이유는 서버가 요청을 정확히 해석해야 하기 때문입니다.
예를 들어 같은 API 주소로 요청을 보내도 Header에 따라 결과가 달라질 수 있습니다.
예시 1. 로그인 인증
Authorization: Bearer abc123
이 Header가 있어야 서버는 “이 사용자가 로그인한 사용자구나”라고 판단할 수 있습니다.
예시 2. JSON 데이터 전송
Content-Type: application/json
이 Header가 있어야 서버는 “본문 데이터가 JSON 형식이구나”라고 이해합니다.
예시 3. 응답 형식 지정
Accept: application/json
클라이언트가 “나는 JSON 응답을 받고 싶다”고 서버에 알려주는 역할을 합니다.
HTTP 요청 Header와 응답 Header 차이
HTTP Header는 크게 두 가지로 나눌 수 있습니다.
| 구분 | 설명 |
|---|---|
| 요청 Header | 클라이언트가 서버에 보내는 정보 |
| 응답 Header | 서버가 클라이언트에게 돌려주는 정보 |
요청 Header란?
요청 Header는 사용자가 서버에 요청을 보낼 때 함께 전달하는 정보입니다.
예를 들어 브라우저, Postman, Python requests가 서버에 요청할 때 이런 Header를 보냅니다.
GET /api/users HTTP/1.1
Host: example.com
Authorization: Bearer YOUR_TOKEN
Accept: application/json인증 정보 전달
요청 데이터 형식 전달
브라우저 정보 전달
언어 설정 전달
캐시 설정 전달
응답 Header란?
응답 Header는 서버가 클라이언트에게 응답을 돌려줄 때 함께 보내는 정보입니다.
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache
Server: nginx
응답 데이터 형식
캐시 정책
서버 정보
쿠키 설정
보안 정책
예를 들어 Content-Type: application/json이 있으면 응답 본문이 JSON 형식이라는 뜻입니다.
자주 보는 HTTP Header 종류
초보자가 먼저 알아두면 좋은 Header는 아래 정도입니다.
| Header | 사용 위치 | 설명 |
|---|---|---|
| Authorization | 요청 | API Key, Bearer Token 인증 |
| Content-Type | 요청/응답 | 데이터 형식 |
| Accept | 요청 | 원하는 응답 형식 |
| User-Agent | 요청 | 브라우저 또는 프로그램 정보 |
| Cookie | 요청 | 저장된 쿠키 전달 |
| Set-Cookie | 응답 | 서버가 쿠키 저장 요청 |
| Cache-Control | 요청/응답 | 캐시 정책 |
| Referer | 요청 | 이전 페이지 정보 |
| Origin | 요청 | 요청 출처 |
| CORS 관련 Header | 응답 | 교차 출처 요청 허용 여부 |
특히 API 테스트에서는 Authorization, Content-Type, Accept를 자주 사용합니다.
HTTP Header 사용 방법 Step-by-Step
API 테스트나 개발 작업에서 Header를 사용하는 흐름은 보통 아래와 같습니다.
1. API 문서에서 Header 요구사항 확인
API 문서에는 보통 필요한 Header가 적혀 있습니다.
예시:
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
먼저 API 문서를 보고 어떤 Header가 필요한지 확인해야 합니다.
2. Postman에서 Header 입력
Postman에서는 Headers 탭에 Key와 Value를 입력하면 됩니다.
| KEY | VALUE |
|---|---|
| Authorization | Bearer YOUR_TOKEN |
| Content-Type | application/json |
이후 Send 버튼을 눌러 API 호출 결과를 확인합니다.
3. Body 데이터 형식과 Header 맞추기
POST 요청에서 JSON 데이터를 보낸다면 Header도 JSON 형식으로 맞춰야 합니다.
Content-Type: application/json
만약 이 설정이 빠지면 서버가 데이터를 제대로 해석하지 못할 수 있습니다.
4. 응답 Header 확인
응답이 돌아오면 Status Code뿐만 아니라 Response Headers도 확인하는 것이 좋습니다.
확인할 항목 :
Content-Type
Cache-Control
Set-Cookie
Server
Access-Control-Allow-Origin
CORS 오류가 발생할 때는 요청 Header보다 응답 Header의 Access-Control-Allow-Origin 설정을 확인해야 하는 경우가 많습니다.
Python requests로 HTTP Header 보내기
Python requests에서도 Header를 쉽게 추가할 수 있습니다.
GET 요청 Header 예제
import requests
url = "https://api.example.com/users"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())
POST 요청 Header 예제
import requests
url = "https://api.example.com/posts"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
data = {
"title": "HTTP Header란?",
"content": "Header 테스트 예제입니다."
}
response = requests.post(url, headers=headers, json=data)
print(response.status_code)
print(response.json())
여기서 중요한 점은 json=data를 사용하면 requests가 자동으로 JSON 형식으로 데이터를 보냅니다.
하지만 API 문서에서 Header를 명확히 요구한다면 Content-Type을 함께 지정하는 것이 안전합니다.
기존 시리즈와 연결해서 이해하기
HTTP Header는 이전에 다룬 개념들과 모두 연결됩니다.
| 기존 글 | HTTP Header와 연결되는 부분 |
|---|---|
| API란 | API 요청 시 Header로 인증 정보 전달 |
| REST API | GET, POST 요청에서 Header 사용 |
| Python requests | headers 옵션으로 Header 전송 |
| Postman 사용법 | Headers 탭에서 직접 테스트 |
| HTTP 상태코드 | Header 오류가 401, 403, 415 등으로 이어짐 |
| JSON | Content-Type, Accept와 연결 |
즉, HTTP Header를 이해하면 API 호출 과정이 훨씬 명확해집니다.
HTTP Header Analyzer로 쉽게 확인하기
HTTP Header는 브라우저 개발자 도구나 Postman에서도 확인할 수 있지만, 간단하게 웹에서 확인하고 싶을 때는 전용 도구를 사용하는 것도 좋습니다.
win-j.com에서는 아래 유틸리티를 제공하고 있습니다.
HTTP Header Analyzer
HTTP 응답 헤더를 분석해 보안 헤더, 캐시 설정, CORS, CSP, HSTS 상태를 확인할 수 있는 무료 개발자 유틸리티입니다.
유틸리티 바로가기이 도구를 사용하면 특정 URL의 HTTP Header 정보를 확인할 수 있습니다.
활용 예시:
내 사이트 응답 Header 확인
Content-Type 확인
서버 캐시 정책 확인
보안 Header 점검
리다이렉트 여부 확인
웹사이트 운영자라면 내 사이트가 어떤 Header를 반환하는지 한 번쯤 확인해보는 것을 추천합니다.
무료 vs 유료 비교
HTTP Header 자체는 비용이 드는 기능이 아닙니다.
다만 Header를 확인하거나 API 테스트를 하는 도구는 무료와 유료 기능이 나뉠 수 있습니다.
| 구분 | 무료 사용 | 유료 사용 |
|---|---|---|
| 브라우저 개발자 도구 | 가능 | 해당 없음 |
| Postman 기본 테스트 | 가능 | 협업/자동화 강화 |
| Header 분석 도구 | 대부분 가능 | 대량 검사, 모니터링 |
| API 인증 테스트 | 가능 | 대량 검사, 모니터링 |
| 추천 대상 | 개인, 초보자, 블로그 운영자 | 팀 개발, 실무 모니터링 |
초보자나 개인 사이트 운영자라면 무료 도구만으로도 충분히 HTTP Header를 학습하고 점검할 수 있습니다.
자주 발생하는 오류 및 해결법
1. 401 Unauthorized
인증 Header가 없거나 잘못되었을 때 발생합니다.
Authorization Header가 있는지
Bearer 뒤에 공백이 있는지
API Key가 올바른지
토큰이 만료되지 않았는지
2. 403 Forbidden
인증은 되었지만 권한이 없을 때 발생합니다.
API 사용 권한
도메인 제한
IP 제한
무료 플랜 제한
3. 415 Unsupported Media Type
보낸 데이터 형식을 서버가 지원하지 않을 때 발생합니다. 대부분 Content-Type 설정 문제입니다.
확인할 것:
Content-Type: application/json
4. CORS 오류
브라우저에서 다른 도메인의 API를 호출할 때 자주 발생합니다.
확인할 Header:
Access-Control-Allow-Origin
CORS는 클라이언트 코드만 고쳐서 해결되지 않는 경우가 많고, 서버 응답 Header 설정이 필요할 수 있습니다.
5. JSON 응답이 깨지거나 파싱되지 않는 문제
응답이 JSON이 아닌 HTML이나 텍스트일 수 있습니다.
Response Header의 Content-Type
실제 응답 Body
상태코드
실전 활용 팁
1. API 오류가 나면 Header부터 확인하기
API Key를 넣었는데도 401이 나온다면 Header 이름이 다를 수 있습니다.
예:
Authorization: Bearer TOKEN
또는
X-API-KEY: TOKEN
API마다 요구하는 방식이 다르므로 문서를 반드시 확인해야 합니다.
2. Content-Type과 Body 형식을 맞추기
JSON을 보내면서 Content-Type이 빠져 있으면 서버가 데이터를 제대로 읽지 못할 수 있습니다.
POST 요청에서는 특히 중요합니다.
3. 보안 Header도 확인하기
웹사이트 운영자라면 다음 Header도 점검해보면 좋습니다.
Strict-Transport-Security
X-Frame-Options
Content-Security-Policy
X-Content-Type-Options
처음에는 어렵게 느껴질 수 있지만, 사이트 보안 점검에서 자주 등장하는 항목입니다.
4. 캐시 Header 확인하기
사이트가 수정되었는데도 이전 화면이 보인다면 캐시 Header와 관련이 있을 수 있습니다.
Cache-Control
ETag
Last-Modified
마무리
HTTP Header는 겉으로 바로 보이지 않지만 웹과 API 통신에서 매우 중요한 역할을 합니다.
HTTP Header는 요청과 응답의 부가 정보
Authorization은 인증 정보
Content-Type은 데이터 형식
Accept는 원하는 응답 형식
응답 Header는 서버의 처리 결과와 정책 정보
API 오류 해결 시 Header 확인이 중요
API, REST API, Postman, Python requests를 공부하고 있다면 HTTP Header는 반드시 함께 이해해야 하는 개념입니다.
처음에는 어렵게 느껴질 수 있지만, 실제로 Postman에서 Header를 입력해보고 응답 Header를 확인해보면 “아, 서버와 클라이언트가 이런 정보를 주고받는구나” 하고 흐름이 보이기 시작합니다. 웹사이트 운영자라면 win-j.com의 HTTP Header Analyzer를 활용해 내 사이트의 Header 상태도 한 번 점검해보는 것을 추천합니다.
첫 댓글을 남겨보세요.