📦 HTTP Header vs Body
🤔 Header와 Body가 뭔가요?
편지를 보내는 상황을 생각해보세요! 📮
Header = 봉투에 적힌 정보 ✉️
- 받는 사람 주소
- 보내는 사람 주소
- 우표, 배송 방법
- "어떻게 처리할지" 알려주는 메타정보
Body = 편지 안의 실제 내용 📝
- 전하고 싶은 실제 메시지
- 사진, 문서 등 첨부물
- "무엇을 전달할지" 담고 있는 데이터
🌐 React/Next.js에서 실제 사용법
Header 설정하기
// fetch API 사용
const response = await fetch('/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
'Accept': 'application/json'
},
body: JSON.stringify({ name: '홍길동' })
});
Next.js API에서 Header 읽기
// pages/api/users.js
export default function handler(req, res) {
const contentType = req.headers['content-type'];
const authToken = req.headers.authorization;
console.log('받은 데이터:', req.body); // Body 내용
}
📋 Header의 주요 역할들
1️⃣ 데이터 형식 알려주기
headers: {
'Content-Type': 'application/json', // JSON 데이터야!
'Accept': 'application/json' // JSON으로 답변해줘!
}
2️⃣ 인증 정보 전달
headers: {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIs...',
'X-API-Key': 'your-api-key-here'
}
3️⃣ 캐시 제어
headers: {
'Cache-Control': 'no-cache',
'If-None-Match': 'etag-value'
}
🎯 Body에 들어가는 것들
JSON 데이터 📊
body: JSON.stringify({
name: '홍길동',
email: 'hong@example.com',
age: 25
})
폼 데이터 📝
const formData = new FormData();
formData.append('name', '홍길동');
formData.append('file', fileInput.files[0]);
fetch('/api/upload', {
method: 'POST',
body: formData // Header에 Content-Type 자동 설정
});
⚖️ Header vs Body 비교표
역할 | 메타정보, 처리 방법 | 실제 전송 데이터 |
크기 | 작음 (보통 8-16KB 제한) | 큼 (MB 단위 가능) |
필수성 | 항상 존재 | 선택적 (GET은 보통 없음) |
가시성 | 개발자 도구에서 쉽게 확인 | 요청에 따라 다름 |
🚨 자주 하는 실수들
1️⃣ Content-Type 안 맞추기 ❌
// 잘못된 예시
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json' // JSON이라고 했는데
},
body: 'name=홍길동&age=25' // 실제론 form data!
});
2️⃣ Authorization Header 빼먹기 ❌
// 토큰 없이 보호된 API 호출
const response = await fetch('/api/protected');
// 401 Unauthorized 에러 발생!
3️⃣ GET 요청에 Body 넣기 ❌
// GET은 보통 Body 없어야 함
fetch('/api/users', {
method: 'GET',
body: JSON.stringify({ filter: 'active' }) // 쿼리스트링 사용해야!
});
💡 실전 꿀팁들
1️⃣ axios 사용시 간편하게
import axios from 'axios';
// Header와 Body를 깔끔하게 분리
const response = await axios.post('/api/users',
{ name: '홍길동' }, // Body
{
headers: { // Header
'Authorization': `Bearer ${token}`
}
}
);
2️⃣ 파일 업로드시 주의사항
// FormData 사용시 Content-Type 헤더 제거!
const formData = new FormData();
formData.append('file', file);
fetch('/api/upload', {
method: 'POST',
// Content-Type 헤더 설정하지 말것!
// 브라우저가 자동으로 boundary 설정
body: formData
});
3️⃣ 커스텀 훅으로 깔끔하게
// useApi.js
const useApi = () => {
const callApi = async (url, data) => {
return fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${getToken()}`
},
body: JSON.stringify(data)
});
};
return { callApi };
};
🔍 Header 크기 제한 알아두기
일반적인 제한사항 ⚠️
- Apache: 8KB (기본값)
- Nginx: 4KB-8KB
- 브라우저: 보통 8KB-32KB
제한 초과시 발생하는 일 💥
- 413 Content Too Large 에러
- 400 Bad Request 에러
- 연결 끊김
해결 방법 🛠️
// 큰 데이터는 Body로!
const longData = 'very long string...';
// Header에 넣지 말고 ❌
headers: { 'X-Long-Data': longData }
// Body에 포함하기 ✅
body: JSON.stringify({ longData })
🎉 마무리
Header는 "어떻게" 처리할지 알려주고, Body는 "무엇을" 전달할지 담고 있어요!
React나 Next.js로 API 통신할 때 이 둘의 역할을 정확히 이해하면 훨씬 깔끔하고 안전한 코드를 작성할 수 있답니다! 🚀
특히 인증이 필요한 API나 파일 업로드할 때 Header 설정을 꼼꼼히 확인하세요! 💪
네트워크 통신에서 Body(Payload)와 Header의 차이는 무엇인가요?
Body와 Header의 가장 큰 차이는 정보(데이터)의 역할입니다.
Header는 데이터의 메타 정보를 담습니다. 즉, 데이터 자체가 아니라 데이터에 대한 컨텍스트 정보를 포함합니다. 이로써 수신자가 데이터를 어떻게 처리해야 할지 지침을 제공하는 역할을 합니다. 예를 들어, HTTP 요청이나 응답에서 Header에는 Content-Type, Authorization, Cache-Control과 같은 정보가 포함됩니다. 이는 정보의 유형, 인증 정보, 캐시 설정 등 컨텍스트 정보를 전달합니다.
반면 Body는 전송하려는 실제 데이터를 의미합니다. HTTP 요청에서 서버로 전달하는 JSON 데이터나 폼 데이터가 이에 해당됩니다. 일반적으로 헤더에 비해 복잡하고 용량이 큰 데이터를 포함합니다.
즉, Header는 네트워크 통신에서 안내 역할을, Body는 본질적인 데이터를 전달하는 역할을 맡고 있습니다. 이 둘의 조화가 효율적인 통신을 가능하게 합니다.
Header 크기에 제한이 있나요? 🤔
HTTP 표준을 정의하는 문서인 HTTP RFC에 따르면, Header의 명시적인 크기 제한은 정해져 있지 않습니다. 다만, Apache, Nginx와 같은 웹서버 단에서 Header의 크기를 제한하고 있는 경우가 많습니다. 일반적으로, 8KB-16KB로 설정되어 있습니다. 이러한 제한값을 초과할 경우, 일반적으로 응답코드 413(Content Too Large)를 응답합니다.
'1일 1CS(Computer Science)' 카테고리의 다른 글
해시 충돌에 대해서 설명해주세요. (0) | 2025.06.09 |
---|---|
자바스크립트 클래스의 접근제어자에 대해 설명해주세요. (1) | 2025.06.09 |
Call By Value와 Call By Reference에 대해서 설명해주세요. (0) | 2025.06.04 |
HTTP란 무엇인지 설명해 주세요. (1) | 2025.06.04 |
교착 상태에 대해서 설명해주세요. (0) | 2025.06.04 |