웹 클라이언트와 서버 간의 통신에서 부가적인 정보를 주고받기 위한 핵심 요소
HTTP message의 body를 해석하고 처리하는 데 필요한 지침, 메타데이터, 인증 정보, 캐시 제어 등이 포함됨
HTTP header body의 의미를 설명하고, 요청/응답을 조정하는 정보 집합.
[요청 메시지] Client → Server
[응답 메시지] Server → Client
->
요청/응답 라인 (Request Line / Status Line)
→ HTTP Header (헤더)
→ 빈 줄
→ 본문 (Body, 선택적)
| 헤더 | 의미 | 예시 |
|---|---|---|
Host | 요청 대상 도메인 | Host: www.example.com |
User-Agent | 클라이언트 정보 | User-Agent: Mozilla/5.0 ... |
Accept | 수용 가능한 MIME 타입 | Accept: text/html, application/json |
Authorization | 인증 정보 | Authorization: Basic abc123== |
Cookie | 클라이언트 저장 정보 | Cookie: sessionId=xyz |
| 헤더 | 의미 | 예시 |
|---|---|---|
Set-Cookie | 클라이언트에 저장할 쿠키 지정 | Set-Cookie: id=12345; Path=/ |
Location | 리다이렉트 URL | Location: https://newsite.com |
Content-Length | 본문 길이 (바이트 단위) | Content-Length: 1024 |
Cache-Control | 캐시 동작 지정 | Cache-Control: no-cache |
Server: Apache/2.4.1 (Unix)WWW-Authenticate| 헤더 | 의미 | 예시 |
|---|---|---|
Connection | 연결 유지 여부 | Connection: keep-alive |
Date | 메시지 생성 시간 | Date: Wed, 05 Jun 2024 12:00:00 GMT |
Connection: keep-alive, Connection: close etc자주 사용하는 정적 리소스(HTML, 이미지, JS 등)의 사본을 로컬에 저장해 두고, 다음에 같은 요청이 오면 다시 다운로드 하지 않고 로컬에서 불러오는 것
목적
저장 위치
동작방식
1.브라우저가 style.css를 서버에 요청
2. 서버가 응답하며 Cache-Control: max-age=86400 포함
3. 브라우저는 이 파일을 24시간 캐시에 저장
4. 다음 요청 시 서버에 가지 않고 로컬 캐시 사용
관련 헤더
| 헤더 | 역할 | 예시 |
|---|---|---|
Cache-Control | 캐시 정책 지정 | no-cache, max-age=3600 |
ETag | 리소스 식별용 버전 태그 | "abc123" |
Last-Modified | 리소스 최종 수정일 | Tue, 04 Jun 2024 08:00:00 GMT |
cache freshness
사본을 저장하기에, 원본 데이터가 변경될 시의 상황을 대비해야 함
-> 캐시 데이터에 유효기간 설정.
검사방법
캐시의 유효 기간이 만료되었을 때, 클라이언트는 캐시의 신선도를 재검사한다.
If-Modified-Since 헤더로 서버에 요청을 보냄Last-Modified 헤더로 특정 자원이 마지막으로 수정된 시점을 알려 줄 수 있다.If-None-Match 헤더와 함께 Etag 값을 보냄서버가 사용자의 브라우저에 저장하는 작은 데이터. 이후 같은 사이트에 접근할 때 마다 자동으로 함께 전송됨.
동작 방식
목적
저장 위치
관련 헤더
| 헤더 | 설명 | 예시 |
|---|---|---|
Set-Cookie (서버 → 클라이언트) | 쿠키 저장 요청 | Set-Cookie: id=abc123; Path=/; HttpOnly |
Cookie (클라이언트 → 서버) | 저장된 쿠키 전송 | Cookie: id=abc123 |
보안
쿠키는 웹에서 사용자 상태를 유지하기 위한 중요 수단이나, 그만큼 보안 취약점에 노출될 가능성도 높다.
특히 인증이나 세션 유지에 사용될 때, 공격자에게 탈취당하면 심각한 문제가 발생할 수 있다.
주요 보안 이슈
HttpOnly가 설정되지 않은 쿠키는 document.cookie로 접근 가능HttpOnly 플래그 설정(자바스크립트에서 접근 차단)Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict
Secure 플래그로 HTTPS 연결에서만 쿠키 전송Set-Cookie: sessionId=abc123; Secure; HttpOnly
사용자가 로그인된 상태에서, 공격자가 악성 요청을 유도해 사용자 권한으로 요청을 실행시키는 공격
브라우저는 자동으로 쿠키를 전송하므로, 공격자가 만든 요청도 쿠키와 함께 서버에 도달
서버는 공격자가 보낸 요청을 진짜 사용자 요청으로 오인할 수 있다
-> CSRF 토큰 사용: 폼마다 난수 토큰을 포함해 서버에서 검증
-> SameSite 속성 설정
| 속성 | 설명 |
|---|---|
Strict | 타 도메인 요청에는 쿠키 전송 금지 (보안 ↑, 불편 ↓) |
Lax | 대부분의 일반 GET 요청은 허용 |
None | 제한 없이 전송 (단, Secure 필요) |
Set-Cookie: sessionId=abc123; SameSite=Strict; Secure; HttpOnly