[Web] HTTP 헤더란? HTTP 헤더에 담긴 정보

HTTP 헤더

HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담고 있다. 메시지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트, 서버 정보 등등... 매우 많은 정보들이 들어있다.

 

표준 헤더의 내용은 너무나 많기 때문에 모든 내용에 대해 궁금하다면 다음을 참고하자.

 

 

List of HTTP header fields - Wikipedia

HTTP header fields are a list of strings sent and received by both the client program and server on every HTTP request and response. These headers are usually invisible to the end-user and are only processed or logged by the server and client applications.

en.wikipedia.org

 

 

크롬에서 HTTP 헤더 보기

크롬에서 HTTP 헤더 보기
[그림 1] HTTP 헤더 보는 법

 

크롬을 기준으로 HTTP 헤더를 보는 법은 아래와 같다.

 

1. HTTP 헤더를 보고 싶은 웹사이트에서 F12 버튼을 누른다.

2. Network -> Name에서 HTTP 헤더를 보고 싶은 항목 클릭 -> Headers 클릭

 

위와 같은 과정을 거치면 HTTP 헤더의 내용을 볼 수 있다. 크게 General, Response Headers, Request Headers 세 가지로 나뉜 것을 확인할 수 있다. 

 

이제 주로 사용되는 헤더의 정보를 알아보자.

 

General Header 항목

General Header는 요청(Request) 및 응답(Response) 메시지 모두에서 사용 가능한 일반적인 헤더 항목들이다. 주요 항목들은 다음과 같다.

 

 

 

 

1. Connection

-> close : 메시지 교환 후 TCP 연결 종료

-> Keep-Alive : 메시지 교환 후 TCP 연결 유지

 

Representation Header 항목

과거 RFC2616에서는 Entity 헤더라고 불리는 엔티티 본문의 데이터를 해석할 수 있는 정보를 제공하는 헤더가 있었다.

하지만 1999년 발표된 RFC2616은 폐기됐고, 2014년 RFC7230~7235가 등장하면서 엔티티(Entity)는 표현(Representation)으로 바뀌게 되었다.

 

이런 Representation 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다. 이 헤더는 전송, 응답 헤더 모두에서 사용 가능하다.

 

 

1. Content-Type

-> 표현 데이터의 형식 설명

 

예시 : "Content-Type: text/html; charset=utf-8", "Content-Type: application/json", "Content-Type : image/png"

 

2. Content-Encoding

-> 표현 데이터를 압축하기 위해 사용, 데이터를 전달하는 곳에서 압축 후 인코딩 헤더를 추가한다. 데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축을 해제한다.

 

예시 : "Content-Encoding: gzip"

 

3. Content-Language

-> 표현 데이터의 자연 언어를 표현

 

예시 :  "Content-Languauge: ko" (ko : 한국어, en : 영어)

 

 

4. Content-Length

-> 표현 데이터의 길이

 

예시 : "Content-Length: 5"

 

 

 

 

Request Header 항목

요청 헤더는 HTTP 요청 메시지 내에서만 사용하는 헤더 항목으로 가장 방대하다.

 

 

1. Accept

-> 클라이언트가 선호하는 미디어 타입 전달

 

2. Accept-Charset

-> 클라이언트가 선호하는 문자 인코딩

 

3. Accept-Encoding

-> 클라이언트가 선호하는 압축 인코딩

 

4. Accept-Language

-> 클라이언트가 선호하는 자연 언어

 

Accept 항목들 중 Accept-Language에 대해서만 예시를 들어보겠다. 만약 "Accept-Language: ko" 항목을 요청 헤더에 넣어 서버에 전송했다고 하자. 해당 서버는 기본 언어가 en(영어)지만, 한국어(ko)도 지원한다면, 기본 언어가 영어더라도 응답을 한국어로 보내주게 된다.

 

 

5. From

-> 유저 에이전트의 이메일 정보, 일반적으로 잘 사용되지는 않으나 검색 엔진 같은곳에서 주로 사용된다.

 

6. Referer

-> 이전 웹 페이지 주소를 나타낸다. 예를 들어 네이버->구글로 이동하는 경우 구글을 요청할 때 Refere:네이버를 포함해서 요청한다. 이러한 Referer를 사용해서 유입 경로 등을 분석할 수 있다.

 

7. User-Agent

-> 유저 에이전트 애플리케이션 정보를 나타낸다.

 

예시 : "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.85 Whale/3.16.138.21 Safari/537.36"

 

8. Host

-> 요청한 호스트 정보(도메인). 이 항목은 필수이다. 하나의 서버가 여러 도메인을 처리해야 할때 혹은 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 사용된다.

 

예시 : "Host: code-lab1.tistory.com"

 

9. Authorization

-> 인증 토큰을 서버로 보낼 때 사용하는 헤더

 

10. WWW-Authenticate

-> 리소스 접근시 필요한 인증 방법 정의

 

 

11. Cookie

-> 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달

 

 

 

 

Response Header 항목

 

1. Date

-> HTTP 메시지를 생성한 일시

 

예시 :  "Date : Mon, 08 Aug 2022 08:26:19 GMT"

 

 

2. Server

-> 요청을 처리하는 origin 서버의 소프트웨어 정보를 나타낸다.

 

예시 : "Server: nginx"

 

 

3. Location

-> 페이지 리다이렉션. Location 헤더가 있으면 Location 위치로 자동으로 이동된다. HTTP 상태 코드 3xx에서 사용된다.

 

참고)

 

[Web] HTTP 상태코드란? 404 Not Found란?

HTTP 상태 코드란? 웹 서비스를 이용하다 보면 종종 "404 Not Found"라는 오류 메시지를 볼 수 있다. 이러한 오류 메시지는 HTTP 상태 코드를 기반으로 한다. HTTP 상태 코드는 클라이언트가 보낸 요청의

code-lab1.tistory.com

 

 

4. Allow

-> 서버측에서 지원 가능한 HTTP 메서드의 리스트.

 

예시 : "Allow : GET, POST"

 

 

5. Retry-After

-> 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간이다. HTTP 상태 코드 503이 발생했을 때 서비스가 언제까지 불능인지 해당 항목을 통해 알려줄 수 있다.

 

예시 : "Retry-After: Fri, 31 Dec 2022 23:59:50 GMT" (날짜 표기), "Retry-After: 120" (초단위 표기)

 

 

6. Set-Cookie

-> 서버에서 클라이언트로 쿠키 전달

 

Set-Cookie의 다양한 여러 속성들

 

# expires : 만료일이 되면 쿠키 삭제 - 예시 : expires = Sat, 26-Dec-2022 22:39:21 GMT

# max-age : 최대 유지 기간 - 예시 : max-age=3600 -> 3600초간 유지

# 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료 시까지만 유지

# 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지

# domain : 명시할 시 명시한 문서 기준 도메인 + 서브 도메인 포함, 생략할 시 현재  문서 기준 도메인만 적용

# path : 경로 지정 , 이 경로를 포함한 하위 경로 페이지만 쿠키 접근 - 예시 : path =/home  

# secure : secure를 적용하면 https인 경우에만 전송. 일반적으로 쿠키는 http, https를 구분하지 않지만 해당 옵션을 사용하면 https인 경우에만 전송

# HttpOnly : XSS 공격 방지, 자바스크립트에서 접근 불가, HTTP 전송에만 사용

# SameSite : XSRF 공격 방지, 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

 

 

 


참고

 

1.https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

(인프런 김영한 강사님 강의 - 모든 개발자를 위한 HTTP 웹 기본 지식)

반응형

댓글

Designed by JB FACTORY