HTTP 헤더(Header)란? HTTP(Header)는 클라이언트와 서버 간에 교환되는 메타데이터 로, 요청(Request)과 응답(Response)에 부가적인 정보를 실어 나르는 역할을 합니다. 헤더를 통해 다음과 같은 정보를 전달할 수 있습니다.
메시지 본문(Body)의 형식 , 길이, 인코딩 방식 클라이언트나 서버의 식별 정보 (브라우저 종류, 서버 종류 등) 캐싱 , 쿠키, 인증, 보안 정책 등 제어 정보 💡 왜 중요한가? 헤더는 HTTP 통신의 “컨트롤러” 역할을 하며, 본문을 전송하기 전후에 반드시 교환되어야 하는 필수 요소입니다. 헤더가 없으면 본문 처리 방식, 권한 검증, 데이터 압축 여부 등을 알 수 없어 제대로 된 통신이 불가능합니다.
헤더의 분류 HTTP 헤더는 크게 4가지 카테고리 로 나뉩니다.
분류 목적 예시 헤더 일반 헤더 요청/응답이 모두 공통으로 사용하는 메타데이터 Cache-Control, Connection, Date 요청 헤더 클라이언트가 서버에 요청을 보낼 때 사용하는 헤더 Host, User-Agent, Accept, Authorization 응답 헤더 서버가 클라이언트에 응답할 때 사용하는 헤더 Server, Set-Cookie, Content-Type, Location 엔티티 헤더 메시지 본문(엔티티)에 관한 정보 Content-Length, Content-Encoding, Last-Modified
주요 요청(Request) 헤더 1. Host 정의 : 요청 대상 서버의 도메인 이름 과 포트 를 지정 예시 : Host: www.example.com 특징 : HTTP/1.1부터 필수 . 하나의 IP에서 여러 도메인을 운영할 때 가상 호스팅을 가능하게 함. 2. User-Agent 정의 : 클라이언트(브라우저 또는 애플리케이션)의 식별 정보 예시 : User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 … 활용 : 서버는 UA를 기반으로 콘텐츠 최적화 (모바일/데스크톱)나 통계 분석 에 활용. 3. Accept 계열 Accept: 요청할 미디어 타입 (text/html, application/json 등) Accept-Encoding: 압축 방식 (gzip, br) Accept-Language: 언어 선호도 (ko-KR, en-US) 예시 : Accept: application/json, text/plain;q=0.9 Accept-Encoding: gzip, deflate, br Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6 4. Authorization 정의 : 인증 자격 증명 정보 종류 : Basic: Base64로 인코딩된 username:password Bearer: JWT(JSON Web Token) 등 토큰 기반 예시 : Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6… 주요 응답(Response) 헤더 1. Server 정의 : 서버 소프트웨어 정보 예시 : Server: Apache/2.4.54 (Ubuntu) 2. Content-Type 정의 : 응답 본문의 MIME 타입 및 문자 인코딩 예시 : Content-Type: text/html; charset=UTF-8 3. Set-Cookie 정의 : 클라이언트에 쿠키 를 설정 옵션 : Path, Expires/Max-Age, Secure, HttpOnly, SameSite 예시 : Set-Cookie: sessionId=abc123; Path=/; HttpOnly; Secure; SameSite=Strict 4. Cache-Control 정의 : 응답 캐싱 정책 예시 : Cache-Control: no-cache, no-store, must-revalidate 5. Location 정의 : 리다이렉션 대상 URL 상태 코드 : 301, 302, 307 등과 함께 사용 예시 : HTTP/1.1 301 Moved Permanently Location: https://www.example.com/new-path 엔티티(Entity) 헤더 1. Content-Length 정의 : 본문의 바이트 길이 예시 : Content-Length: 348 2. Content-Encoding 정의 : 본문 압축 방식 예시 : Content-Encoding: gzip 3. Last-Modified / ETag 정의 : 리소스 최종 수정 시간 또는 엔티티 태그 캐싱 활용 : If-Modified-Since, If-None-Match 요청 헤더와 함께 사용 예시 : Last-Modified: Wed, 21 Oct 2024 07:28:00 GMT ETag: “5d8c72a5edda8-3c1” 보안(Security) 관련 헤더 1. CORS (Cross-Origin Resource Sharing) Access-Control-Allow-Origin, Access-Control-Allow-Methods 등 목적 : 브라우저의 동일 출처 정책 우회 허용 제어 2. CSP (Content Security Policy) Content-Security-Policy: 스크립트, 스타일, 이미지 로딩 출처 제한 예시 : Content-Security-Policy: default-src ‘self’; script-src ‘self’ https://apis.google.com 3. HSTS (HTTP Strict Transport Security) Strict-Transport-Security: HTTPS 강제 적용 예시 : Strict-Transport-Security: max-age=31536000; includeSubDomains; preload 기타 커스텀(Custom) 헤더 X- 접두사 : 과거에 비표준 헤더 식별 용도로 사용 (X-Request-ID) Tracer : 분산 트레이싱용 Trace-Id, Span-Id 예시 : X-Request-ID: 123e4567-e89b-12d3-a456-426614174000 💡 Tip : 최신 RFC에서는 X- 접두사 대신 벤더 접두사 (예: MyCompany-)나 표준화된 헤더 생성 권장.
HTTP/2·HTTP/3에서의 헤더 변화 HPACK (HTTP/2) : 헤더 압축 알고리즘 QPACK (HTTP/3) : 지연 없는 헤더 압축 특징 : 헤더 블록을 바이너리 스트림으로 전송, 효율성 대폭 향상 베스트 프랙티스 필요 최소한의 헤더 만 사용 표준 준수 : 유효하지 않은 값이 전달되지 않도록 검증 보안 강화 : HttpOnly, Secure, SameSite 옵션 적극 사용 캐싱 전략 명확히 설계 (Cache-Control, ETag, Expires) 압축 허용(Accept-Encoding, Content-Encoding)으로 대역폭 절약 결론 HTTP 헤더는 서버·클라이언트 통신의 중추 로, 메타데이터를 통해 요청 방식, 콘텐츠 형식, 보안 정책, 캐싱 전략 등을 제어합니다. 본 블로그에서 다룬 헤더 분류, 주요 필드, 보안 헤더, HTTP/2·3의 압축 메커니즘, 그리고 베스트 프랙티스를 숙지하면, 보다 안전하고 효율적인 웹 서비스를 설계 할 수 있습니다.