HTTP 헤더는 클라이언트(브라우저 등)와 서버가 HTTP 요청응답에서 주고받는 메타데이터를 포함하는 필드입니다. 이 헤더는 클라이언트의 요청 정보나 서버의 응답에 대한 추가 정보를 전달하며, 요청이나 응답의 성격을 설명하고, 전송되는 데이터의 세부 사항을 알려줍니다.

HTTP 헤더의 역할

  1. 요청 및 응답 정보 제공: 클라이언트가 어떤 데이터를 원하는지, 서버가 어떤 데이터를 제공하는지에 대한 정보를 명시합니다.
  2. 데이터 포맷 지정: 데이터 형식, 인코딩 방식, 언어, 길이 등 데이터를 어떻게 해석해야 할지를 알려줍니다.
  3. 상태 정보 전달: 상태 코드나 쿠키 같은 정보를 통해 클라이언트와 서버 간의 상태를 관리합니다.
  4. 보안 관련 정보: 인증 정보, HTTPS 등의 보안 프로토콜과 관련된 정보를 주고받습니다.

HTTP 헤더의 구조

HTTP 헤더는 요청(Request)과 응답(Response)에서 공통적으로 사용되며, 키-값 쌍으로 구성됩니다.

Header-Name: header-value

HTTP 헤더의 주요 유형

  1. 일반 헤더(General Header): 요청과 응답 양쪽에서 모두 사용될 수 있는 헤더입니다. 클라이언트와 서버 간에 전송되는 메시지의 처리 지침을 제공합니다.

  2. 요청 헤더(Request Header): 클라이언트가 서버로 데이터를 요청할 때 전송하는 헤더로, 클라이언트의 정보와 요청에 대한 세부 사항을 서버에 전달합니다.

  3. 응답 헤더(Response Header): 서버가 클라이언트에 응답할 때 전송하는 헤더로, 서버에서 클라이언트에게 전송할 정보에 대한 메타데이터를 포함합니다.

  4. 엔터티 헤더(Entity Header): 요청 또는 응답에 포함된 실제 엔터티 데이터(본문)에 대한 정보를 제공합니다. 콘텐츠의 길이, 유형, 인코딩 방식 등을 정의합니다.

  5. 쿠키 헤더(Cookie Header): 서버와 클라이언트 간의 상태를 관리하는 데 사용되는 헤더로, 쿠키 데이터를 전송하는 데 사용됩니다.


자주 사용되는 HTTP 헤더

1. 요청(Request) 헤더

  • Host: 클라이언트가 요청하는 서버의 도메인 이름과 포트를 명시합니다.

    Host: www.example.com
  • User-Agent: 요청을 보내는 클라이언트의 정보(브라우저, 운영체제 등)를 서버에 전달합니다.

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
  • Accept: 클라이언트가 수신할 수 있는 미디어 타입을 명시합니다.

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9
  • Accept-Encoding: 클라이언트가 지원하는 인코딩 방식을 명시합니다. 서버는 이 정보에 맞춰 데이터를 압축하여 전송할 수 있습니다.

    Accept-Encoding: gzip, deflate, br
  • Accept-Language: 클라이언트가 선호하는 언어를 지정합니다.

    Accept-Language: en-US,en;q=0.9
  • Authorization: 서버에 인증 정보를 전달할 때 사용됩니다. 주로 Basic이나 Bearer 토큰으로 인증 정보를 포함합니다.

    Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
    Authorization: Bearer <token>
  • Referer: 현재 요청이 발생한 직전 페이지의 URL을 포함하여 서버에 전달합니다.

    Referer: https://www.google.com

2. 응답(Response) 헤더

  • Content-Type: 서버가 클라이언트에게 전송하는 데이터의 타입(미디어 타입)을 명시합니다.

    Content-Type: text/html; charset=UTF-8
  • Content-Length: 서버가 전송하는 데이터의 길이(바이트 단위)를 나타냅니다.

    Content-Length: 3495
  • Set-Cookie: 서버가 클라이언트에 쿠키를 전송할 때 사용합니다. 이후 요청에서 이 쿠키가 클라이언트에 의해 자동으로 서버로 전송됩니다.

    Set-Cookie: sessionId=abc123; Path=/; HttpOnly
  • Location: 서버가 클라이언트에게 리다이렉션할 URL을 명시합니다. 주로 3xx 상태 코드와 함께 사용됩니다.

    Location: https://www.example.com/new-page
  • Cache-Control: 클라이언트가 응답을 캐시할 방법을 명시합니다. 응답이 캐시 가능한지 여부와 캐시 만료 시간 등을 정의합니다.

    Cache-Control: no-cache, no-store, must-revalidate
  • Access-Control-Allow-Origin: CORS 설정을 통해 특정 도메인에서만 자원을 허용할 때 사용됩니다. 서버가 특정 출처에서만 요청을 허용할 때 설정합니다.

    Access-Control-Allow-Origin: https://www.example.com
  • Retry-After: 클라이언트가 일정 시간 후에 다시 요청해야 하는 경우, 서버가 재요청할 시간을 명시합니다. 주로 503 Service Unavailable 응답과 함께 사용됩니다.

    Retry-After: 120  // 120초 후 재요청

3. 일반(General) 헤더

  • Connection: 연결 상태를 관리하며, keep-alive를 사용하여 클라이언트와 서버 간의 연결을 유지할지 여부를 명시합니다.

    Connection: keep-alive
  • Date: 메시지가 생성된 날짜와 시간을 나타냅니다.

    Date: Mon, 10 Oct 2024 14:00:00 GMT

4. 쿠키(Cookie) 관련 헤더

  • Cookie: 클라이언트가 서버로 쿠키를 보낼 때 사용하는 헤더입니다.

    Cookie: sessionId=abc123; lang=ko-KR
  • Set-Cookie: 서버가 클라이언트에게 쿠키를 설정할 때 사용하는 헤더입니다.

    Set-Cookie: sessionId=abc123; Path=/; HttpOnly

예시: 클라이언트 요청과 서버 응답

클라이언트 요청

GET /index.html HTTP/1.1
Host: www.example.com
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
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

서버 응답

HTTP/1.1 200 OK
Date: Mon, 10 Oct 2024 14:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1024
Connection: keep-alive

이 요청과 응답에서 클라이언트와 서버는 여러 가지 HTTP 헤더를 통해 요청의 세부사항(브라우저 정보, 언어, 인코딩 방식 등)과 응답의 정보(내용 길이, MIME 타입 등)를 주고받고 있습니다.

결론

HTTP 헤더는 클라이언트와 서버 간의 중요한 정보를 교환하는 메커니즘으로, 웹 요청과 응답의 전반적인 처리를 관리하고 최적화하는 데 매우 중요한 역할을 합니다. 요청 헤더를 통해 클라이언트는 서버에 정보를 전달하고, 응답 헤더를 통해 서버는 클라이언트에게 데이터를 적절하게 전송합니다.

+ Recent posts