[Web] HTTP 헤더(header) 구조와 주요 파라메터 정리

HTTP 헤더란?

HTTP 헤더는 웹 브라우저와 서버 간의 통신 방법인 HTTP 통신 메시지에서 메타데이터를 담고 있는 부분을 말합니다. 여기서 메타데이터는 쉽게 말해 다른 데이터를 설명해 주는 데이터를 말하는데요. 그러니까 HTTP 헤더는 HTTP 메시지의 부가적인 정보를 담고 있다고 생각하시면 이해가 편하실 것 같습니다. HTTP 통신은 요청과 응답 시에 모두 HTTP 메시지로 통신을 합니다. 일반적으로 웹 브라우저는 사용자가 요청한 웹 페이지에 대한 정보를 받기 위해 서버에게 HTTP 요청을 보내고, 서버는 해당 요청에 대한 응답으로 HTML, 이미지, 스크립트 등의 데이터를 브라우저에 응답값으로 보내게 되는데 여기서 요청과 응답 시에 공통으로 사용되는 값과 다르게 사용되는 값들이 있습니다. 이번 포스팅에서는 HTTP 헤더에서 사용되는 값들에 대해 구체적으로 알아보도록 하겠습니다.

 


 

 일반 헤더 (General Headers) 

Cache-Control: max-age=3600
Connection: keep-alive
Date: Fri, 07 Jan 2024 12:34:56 GMT
Pragma: no-cache
Trailer: 
Transfer-Encoding: chunked
Upgrade: websocket
Via: 1.1 proxy.example.com
Warning: 199 Miscellaneous warning

일반 헤더(General Headers)는 HTTP 요청과 응답시 모두 사용하는 헤더 필드로 일반적인 의미로 사용됩니다.

 

Cache-Control

클라이언트와 서버 간 캐싱 동작을 제어하는 데 사용됩니다.

  • no-cache : 캐시를 사용하지 않고 항상 서버로부터 리소스를 가져옵니다.
  • no-store : 응답과 요청을 캐시에 저장하지 않습니다.
  • max-age=<seconds> : 캐시 유효 시간을 초단위로 설정합니다.
  • public : 응답이 어떤 사용자에게든 캐시될 수 있도록 설정합니다.
  • private : 응답이 특정 사용자에게만 캐시될 수 있도록 설정합니다.

 

Connection

클라이언트와 서버 간의 연결 관리에 사용됩니다.

  • keep-alive : HTTP 통신을 지속적으로 연결하고 있습니다.
  • close : HTTP 통신 후 연결을 닫습니다.

 

Date

현재 HTTP 메시지가 생성된 시간을 표시합니다.

 

Pragma 

HTTP/1.0에서 쓰던 것으로 캐시제어 (no-cache)로 사용됩니다. HTTP/1.1에서는 Cache-Control을 쓰는 것이 권장됩니다.

 

Trailer

메시지의 끝에 추가되는 헤더 목록을 선언합니다.

 

Transfer-Encoding

HTTP 메시지 본문의 자체 압축 방식을 지정합니다. 조금씩 브라우저가 HTTP 메시지를 해석해서 데이터를 화면에 뿌려줄 때 이 기능을 사용합니다.

  • chunked : 메시지 본문을 여러 덩어리로 나눠서 전송합니다. 웹 서버가 클라이언트에게 데이터를 실시간으로 전송하거나, 대용량 데이터를 조금씩 전송하는 데 유용하게 사용됩니다.

 

Upgrade

리소스의 업그레이드를 요청하거나, 프로토콜을 변경할 때 사용됩니다.

 

Via

메시지가 프록시를 통과한 경우에 프록시 서버의 정보를 나타냅니다.

 

Warning

메시지에 대한 경고 메시지를 포함합니다.

 


 

 요청 헤더 (Request Headers) 

Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://www.referer-example.com/page1
Cookie: session_id=abc123; user_id=12345
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Content-Type: application/json
Content-Length: 1024
If-None-Match: "etag_value"

HTTP 요청 헤더(Request Headers)는 클라이언트가 서버에게 HTTP 요청을 보낼 때 사용하는 헤더 필드로 요청에 필요한 메타데이터를 담고 있습니다.

 

Host

요청한 호스트의 도메인 이름 또는 IP 주소를 지정합니다.

 

User-Agent

클라이언트 소프트웨어의 식별자를 지정합니다.

 

Accept

클라이언트가 수락 가능한 미디어 타입 목록을 지정합니다.

 

Accept-Language

클라이언트가 선호하는 언어 목록을 지정합니다.

 

Accept-Encoding

클라이언트가 지원하는 컨텐츠 인코딩 방식을 지정합니다.

 

Referer

현재 요청이 어디서 왔는지를 지정합니다.

 

Cookie

클라이언트에서 서버로 전송되는 쿠키 정보를 지정합니다.

 

Authorization

클라이언트의 인증 정보를 지정합니다.

 

If-None-Match

서버에 캐시된 리소스의 엔터티 태그 값을 전달하여, 리소스가 수정되었는지 확인합니다.

 

If-Modified-Since

특정 날짜 이후에 수정된 리소스를 요청합니다.

 

Origin

요청이 어느 출처에서 시작되었는지를 나타냅니다.

 


 

 응답 헤더 (Response Headers) 

Server: Apache/2.4.41 (Unix) OpenSSL/1.1.1g
Date: Fri, 07 Jan 2024 12:34:56 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1024
Content-Encoding: gzip
Location: https://www.example.com/new-location
WWW-Authenticate: Basic realm="Example"
Set-Cookie: user_id=12345; Expires=Wed, 21 Oct 2025 07:28:00 GMT; Path=/
Cache-Control: max-age=3600
Expires: Wed, 21 Oct 2025 07:28:00 GMT
ETag: "etag_value"
Last-Modified: Thu, 01 Jan 2023 00:00:00 GMT
Allow: GET, POST, PUT

HTTP 응답 헤더(Response Headers)는 서버가 클라이언트에게 HTTP 응답을 보낼 때 사용하는 헤더 필드로 응답에 필요한 메타데이터를 담고 있습니다.

 

Server

서버 소프트웨어의 정보를 제공합니다.

 

WWW-Authenticate

클라이언트에게 인증이 필요하다는 정보를 전달합니다.

 

Set-Cookie

클라이언트에게 서버로부터 쿠키를 저장하도록 지시합니다.

 

Expires

캐시의 만료 날짜와 시간을 나타냅니다.

 

Allow

리소스에 대한 허용된 HTTP 메서드를 나타냅니다.

 


 

 엔티티 헤더 (Entity Headers) 

Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Content-Length: 1024
Content-Language: en-US
Last-Modified: Thu, 01 Jan 2023 00:00:00 GMT
ETag: "etag_value"

엔터티 헤더(Entity Headers)는 HTTP 메시지의 본문에 필요한 메타데이터를 담고 있습니다.

 

Content-Type

엔터티의 미디어 타입을 정의합니다. 이 헤더는 데이터가 어떤 형식인지를 서술합니다.

 

 

Content-Encoding

엔터티 본문의 전송 인코딩을 나타냅니다. 이 헤더는 데이터가 전송되는 동안 압축 또는 기타 형태의 인코딩이 적용되었음을 알려줍니다.

 

Content-Length

엔터티 본문의 크기를 바이트 단위로 나타냅니다. 이 헤더는 엔터티의 전체 크기를 나타냅니다.

 

Content-Language

엔터티의 자연 언어를 정의합니다. 이 헤더는 엔터티가 어떤 언어로 작성되었는지를 나타냅니다.

 

Last-Modified

엔터티가 마지막으로 수정된 날짜와 시간을 나타냅니다.

 

ETag

엔터티의 엔터티 태그를 나타냅니다. 이는 엔터티의 고유한 식별자로 사용됩니다.

댓글

Designed by JB FACTORY