[HTTP] HTTP 헤더 정리

류재성's avatar
Jun 17, 2024
[HTTP] HTTP 헤더 정리

1. HTTP 헤더란?

💡
HTTP 메세지중 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송하며, HTTP 헤더는 대소문자를 구분하지 않는 이름과 콜론(:) 그리고 값으로 이루어져있다.
특히 쿠키나 세션방식의 인증방식을 사용할 때, 토큰을 헤더에 실어 전달한다.
 
notion image
헤더는 크게 일반 헤더(General Header), 엔티티 헤더(Entity Header), 요청 헤더(Request Header),
응답 헤더(Response Header) 가 있다.
 
notion image
💡
개발자 모드의 General 은 HTTP 요청 및 응답에 대한 메타데이터이고 일반 헤더는 아님.
Request URL : 요청이 보내진 URL
Request Method : HTTP 메서드(GET, POST 등)
Status Code: 서버 응답의 상태 코드 (예: 200 OK).
Remote Address : 요청이 보내진 원격 주소
Referrer Policy : 보안과 관련된 설정
 

2. 일반 헤더(General Header)

💡
HTTP 일반 헤더는 HTTP 요청 및 응답과 함께 전송되는 메타데이터이다. 이 헤더는 요청과 응답 모두에 적용되며, 전송되는 데이터와는 독립적이다.
 

종류

1. Cache-Control
  • 캐시 지침을 나타내며, 클라이언트와 서버 간의 데이터 캐시 방식을 제어
💡
Cache-Control: no-cache 데이터가 캐시되지 않음
2. Connection
  • 네트워크 연결 관리에 대한 지시를 제공하며, 연결을 유지할지 종료할지를 명시
💡
Connection: keep-alive는 연결을 유지
3. Date
  • 메시지가 생성된 날짜와 시간을 나타낸다.
💡
Date: Tue, 15 Nov 1994 08:12:31 GMT
4. Pragma
  • HTTP/1.0에서 캐시 제어를 위해 사용되었으며, 주로 no-cache 디렉티브를 포함한다.
💡
Pragma: no-cache
5.Trailer
  • 메시지 바디의 끝에 따라올 추가 헤더 필드를 나타낸다.
💡
Trailer: Expires
6.Transfer-Encoding
  • 메시지 바디의 전송 코딩 방식을 지정한다.
💡
Transfer-Encoding: chunked
7. Upgrade
  • 클라이언트가 현재 프로토콜을 업그레이드할 수 있음을 나타낸다.
💡
Upgrade: HTTP/2.0
8.Via
  • 중간 프록시 서버 또는 게이트웨이를 통해서 메시지가 전달되었음을 나타낸다.
💡
Via: 1.0 fred, 1.1 example.com (Apache/1.1)
9.Warning
  • 메시지와 관련된 일반 경고를 제공하며, 캐시와 관련된 문제를 포함한다.
💡
Warning: 199 Miscellaneous warning
 
 

3 .엔티티 헤더(Entity Header)

💡
컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤
 

종류

1.Allow
서버가 지원하는 HTTP 메서드를 나열한다.
💡
Allow: GET, POST, PUT
2.Content-Encoding
콘텐츠가 인코딩된 방식을 나타낸다.
💡
Content-Encoding: gzip
3.Content-Language
콘텐츠의 언어를 나타낸다.
💡
Content-Language: en
4.Content-Length
메시지 바디의 바이트 단위 길이를 나타낸다.
💡
Content-Length: 348
5.Content-Location
요청된 리소스의 대체 위치를 나타낸다.
💡
Content-Location: /index.htm
6.Content-MD5
콘텐츠의 MD5 해시를 제공하여 무결성을 검사한다.
💡
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
7.Content-Range
부분 콘텐츠의 범위를 나타낸다.
💡
Content-Range: bytes 200-1000/67589
8.Content-Type
콘텐츠의 MIME 타입을 나타낸다.
💡
Content-Type: text/html; charset=UTF-8
9.Expires
콘텐츠의 만료 날짜와 시간을 나타낸다.
💡
Expires: Thu, 01 Dec 1994 16:00:00 GMT
10.Last-Modified
리소스의 마지막 수정 날짜와 시간을 나타낸다.
💡
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
 
 

4. 응답 헤더(Response Header)

💡
클라이언트가 서버로 요청을 보낼 때 사용
notion image
 

종류

1.Access-Control-Allow-Credentials
브라우저가 자격 증명(쿠키, HTTP 인증 헤더)을 포함한 요청을 할 수 있는지 여부를 나타낸다.
💡
Access-Control-Allow-Credentials: true
2.Access-Control-Allow-Origin
CORS 요청을 허용하는 출처를 지정한다.
💡
Access-Control-Allow-Origin: https://wonit.tistory.com 특정 출처(여기서는 https://wonit.tistory.com)에서 온 요청을 허용
3.Connection
현재 TCP 연결을 계속 유지하거나 종료할 것인지 여부를 나타낸다.
💡
Connection: upgrade
4.Date
응답이 생성된 날짜와 시간을 나타낸다.
💡
Date: Thu, 13 Jun 2024 11:06:40 GMT
5.Sec-Websocket-Accept
웹소켓 핸드셰이크 응답을 검증하는 값이다.
💡
Sec-Websocket-Accept: v+0neS26vFs3x2D2wNgkE4Eg7JQ=
6.Set-Cookie
클라이언트에 쿠키를 설정하는 데 사용된다.
💡
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
7.Upgrade
클라이언트와 서버 간의 프로토콜을 변경할 것을 지시한다.
💡
Upgrade: websocket
8.Uwwebsockets
특정 웹 애플리케이션에서 웹소켓의 개수나 설정과 관련된 정보를 전달한다.
💡
Uwwebsockets: 20
9.Vary
캐시 서버가 요청 헤더의 다른 값을 기반으로 응답을 저장할지 결정한다.
💡
Vary: Origin
 

5. 요청 헤더(Request Header)

💡
서버가 클라이언트에 응답을 보낼 때 사용
notion image
 
 

종류

1.Accept
클라이언트가 처리할 수 있는 미디어 타입을 지정한다.
💡
Accept: text/html
2.Accept-Charset
클라이언트가 처리할 수 있는 문자 인코딩을 지정한다.
💡
Accept-Charset: utf-8
3.Accept-Encoding
클라이언트가 이해할 수 있는 콘텐츠 인코딩을 지정한다.
💡
Accept-Encoding: gzip, deflate
4.Accept-Language
클라이언트가 선호하는 언어를 지정한다.
💡
Accept-Language: en-US
5.Authorization
사용자 인증을 위해 자격 증명을 포함한다.
💡
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
6.Cache-Control
캐싱 메커니즘을 제어한다.
💡
Cache-Control: no-cache
7.Connection
클라이언트와 서버 간의 연결 설정을 지정한다.
💡
Connection: keep-alive
8.Cookie
클라이언트의 쿠키 데이터를 포함한다.
💡
Cookie: sessionId=abc123
9.Content-Length
요청 본문의 길이를 바이트 단위로 지정한다.
💡
Content-Length: 348
10.Content-Type
요청 본문의 MIME 타입을 지정한다.
💡
Content-Type: application/json
11.Date
요청이 발송된 날짜와 시간을 포함한다.
💡
Date: Tue, 15 Nov 1994 08:12:31 GMT
12.Host
요청을 보낸 서버의 도메인 이름과 포트 번호를 포함한다.
💡
Host: www.example.com
13.Referer
클라이언트가 현재 요청된 페이지로 이동하기 직전에 머물렀던 페이지의 주소를 포함한다.
💡
Referer: http://www.example.com/previous-page
14.User-Agent
클라이언트 애플리케이션의 정보를 포함한다.
💡
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
 

6. HTTP 캐시 제어 헤더

 

6.1 캐시란?

💡
캐시(Cache)는 주기억장치에서 자주 사용하는 프로그램과 데이터를 하드디스크로부터 가져오는데 시간이 많이 걸리니 캐시 저장소에 임시로 적재해두고 빠르게 접근하기 위한 기술이다.
notion image

6.2 Cache-Control

💡
클라이언트가 이전과 동일한 데이터를 요청한다면 서버와 재통신은 낭비가 된다. 이러한 낭비를 줄이기 위해 Cache-Control 을 사용한다.
 

Cache-Control 종류

💡
no-cache: 캐시된 데이터를 사용하기 전에 서버에 유효성을 확인하도록 한다. no-store: 요청 및 응답 데이터를 캐시에 저장하지 않는다. must-revalidate: 만료된 캐시 항목은 서버에 재검증을 받아야 한다. public: 응답을 브라우저와 프록시 캐시에 저장할 수 있다. private: 응답을 특정 사용자 브라우저 캐시에만 저장한다. max-age: 캐시된 응답의 유효 기간을 초 단위로 설정한다. s-maxage: 공유 캐시(프록시)에서만 유효 기간을 설정한다.
 
 

6.3 Expires

💡
응답 컨텐츠의 만료 날짜와 시간을 설정한다. 만약 Cache-Control의 max-age가 설정된 경우 무시된다. 예시) Expires: Wed, 21 Oct 2021 07:28:00 GMT
 
notion image
 

6.4 ETag

💡
리소스의 고유 식별자를 설정하여 캐시된 리소스의 변경 여부를 확인한다. 예시) ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4
 

6.5 Last-Modified

💡
리소스가 마지막으로 수정된 날짜와 시간을 설정한다. 예시) Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Share article
RSSPowered by inblog