HTTP 헤더는 무엇일까?
HTTP 헤더
--
HTTP 메시지에서
필드 라인에 다양한 HTTP 헤더들이 명시된다.
요청 메시지에 주로 사용되는 헤더
- Host
- User-Agent
- Referer
- Authorization
Host는
요청을 보낼 호스트를 나타내는 헤더로,
주로 도메인 네임으로 명시되며, 포트 번호도 포함될 수 있다.
Host: www.google.com
-- http://www.goolge.com/example/test에 요청 보낸 경우의 Host 헤더 값
User-Agent는
웹 브라우저처럼 HTTP 요청을 시작하는 클라이언트 측의 프로그램을 나타내는 헤더로,
요청을 보낸 클라이언트의 정보가 명시된다.
즉, 요청 메시지를 생성하는데 관여한 클라이언트 프로그램과 관련된 다양한 정보가 명시된다.
User-Agent: Mozilla/5.0(windows NT 10.0; win64; rv:109.0) Gecko/20100101 Firefox/109.0
-- Mozilla/5.0은 "웹 브라우저의 Mozilla 호환 여부"로 현대의 웹 브라우저를 통한 요청 메시지에 대부분 포함
-- windows NT 10.0은 "운영체제 및 아키텍처 정보"
-- rv: 109.0) Gecko/20100101은 "렌더링 엔징 관련 정보"로 브라우저에서 시각적 요소를 구현하는 구성 요소
-- Firefox/109.0은 "브라우저와 해당 버전 정보"
Referer는
클라이언트가 요청을 보낼 때 머무르고 있었던 URL을 나타내는 헤더로
클라이언트의 유입 경로를 파악할 수 있다.
즉, 현재 요청을 보낸 이전의 웹 페이지 URL이 명시된다.
Refere: https://www.google.com
-- https://www.google.com에서 https://www.naver.com으로 요청을 보낸 경우의 Refere 헤더 값
Authorization은
클라이언트의 인증 정보를 담는 헤더로
주로 API key나 토큰이 사용된다.
Authorization: Bearer <token>
응답 메시지에 주로 사용되는 헤더
- Server
- Allow
- Retry-After
- Location
- WWW-Authenticate
Server는
요청을 처리하는 서버 측의 소프트웨어와 관련된 정보를 명시하는 헤더
Server: Apache/2.4.1 (Unix)
-- 응답을 보낸 서버는 Unix 운영체제에서 동작하는 아파치 HTTP 서버를 사용한다는 의미다.
Allow는
클라이언트에 허용된 HTTP 메서드 목록을 알려 주기 위한 헤더로,
일반적으로 상태 코드(405)를 응답하는 메시지에서 Allow 헤더가 함께 사용된다.
(405 상태코드는 "요청한 메서드를 지원하지 않는다."라는 의미의 상태 코드다.)
Allow: POST, OPTIONS
Retry-After는
클라이언트가 재요청하기 전에 기다려야 하는 시간(초 단위)을 알려주기 위한 헤더로,
(초 단위 or 특정 날짜를 명시할 수 있다. "명시한 시간/날짜 이후에 사용 가능하다"는 의미)
일반적으로 상태 코드(503)를 응답하는 메시지에서 Retry-After 헤더가 함께 사용된다.
(503 상태코드는 "현재 해당 요청을 처리할 수 없으나 추후에 가능할 수도 있다."라는 의미의 상태 코드다.)
Retry-After: Fri, 23 Aug 2024 09:00:00 GMT
Retry-After: 180
Location은
클라이언트에게 해당 요청에 대한 자원의 위치를 알려주기 위해 사용하는 헤더로,
라다이렉션 시 새 리소스의 URL을 명시하여 전달한다.
즉, "해당 요청은 여기서 처리할 수 없으니 명시한 URL로 다시 재요청을 보내라"라는 의미
Location: https://www.google.com
WWW-Authenticate는
요청한 자원에 접근하기 위해 필요한 인증 방식을 설명하는 헤더로,
상태 코드(401)와 함께 사용되는 헤더다.
(401 상태 코드는 "요청한 자원에 대한 유효한 인증이 없다"는 의미)
공통으로 사용되는 헤더
- Date
- Connection
- Content-Length
- Content-Type
- Content-Language
- Content-Encoding
Date는
해당 메시지가 생성된 날짜를 명시하는 헤더다.
Date: Wed, 20 Now 2024 12:34:56 GMT
Connection은
클라이언트의 요청과 응답 간의 연결 방식을 설정하는 헤더로
연결을 유지할지 여부를 나타내는 헤더다.
(지속 연결 프로토콜에서 연결을 지속하기 위해 사용된다.)
Connection: keep-alive
Content-Length는
메시지에서 본문(body)의 byte단위 크기를 나타낸다.
Content-Length: 150
Content-Type, Content-Language, Content-Encoding은
전송하는 메시지 본문(body)의 표현 방식을 설명하는 헤더다.
- Content-Type : 본문의 데이터 형식
- Content-Language : 본문의 언어
- Content-Encoding : 데이터의 인코딩 방식
Content-Type: text/html; charset=UTF-8
Content-Language: en-KR
Content-Encoding: gzip
--
HTTP 캐시
--
클라이언트가 같은 요청을 여러 번 하면
서버는 매번 같은 요청을 처리하는 작업이 비효율적이기 때문에
HTTP 캐시를 활용하여 응답받은 내용의 사본을 임시로 저장하여 사용할 수 있다.
캐시(Cache)는
불필요한 대역폭 낭비와 응답 지연을 방지하기 위해
정보의 사본을 임시로 저장하는 기술로,
동일한 요청에 대해 캐시 된 데이터를 활용할 수 있어,
불필요한 대역폭 낭비를 줄일 수 있고, 빠르게 데이터에 접근할 수 있다.
여기서 정보의 사본을 임시로 저장하는 것 자체를 "캐시"한다 or "캐싱"한다고 표현한다.
캐시는
웹 브라우저에 저장되어 있기도 하고,
클라이언트와 서버 사이에 위치한 중간 서버에 저장되어 있기도 하다.
- 웹 브라우저에 저장된 캐시 : 개인 전용 캐시
- 중간 서버에 저장된 캐시 : 공용 캐시
응답 메시지의
- Expires 헤더 : 캐시 된 리소스의 만료 날짜와 시간을 설정
- Cache-Control 헤더의 Max-Age(초 단위) 값 : 지정된 시간(초) 동안만 캐시된 데이터를 사용
을 통해 캐시 할 데이터에 유효 기간을 부여할 수 있다.
Expires: Wed, 20 Nov 2024 12:00:00 GMT
-- 2024/11/20 수요일 12시까지만 캐시 사용
Cache-Control: max-age=1200
-- 1200초 동안만 캐시 사용
HTTP/1.1에서 Cache-Control: max-age를 더 많이 사용하지만,
하위 호환성을 위해 Expires를 사용하기도 한다.
여기서 캐시 된 자원(리소스)이 여전히 캐시 중인지 검사하기 위한 검사 헤더도 있다.
- If-Modified-Since : 명시한 날짜 이후로 수정된 자원 여부 확인 후 있다면 해당 새 자원으로 응답 요청
- If-None-Match : Etag 값이 부여된 자원을 지금 요청 보낸 값과 비교하여 변경되었다면 해당 자원으로 응답 요청
즉, If-Modified-Since는 날짜 기반으로 캐시 신선도를 재검사하는 방식이고,
If-None-Match는 "엔티티 태그(Etag, Entity Tag)"를 기반으로 캐시 신선도를 재검사하는 방식이다.
If-Modified-Since: Wed, 20 Nov 2024 12:00:00 GMT
-- 2024/11/20 수요일 12시 이후로 요청하는 자원이 변경된 적이 있는지
If-None-Match: "abc123xyz"
-- 요청하려는 자원의 Etag의 값이 "abc123xyz"에서 변경되었는지
- 변경 O : 200 상태코드와 함께 변경된 자원을 응답
- 변경 X : 304 상태코드와 함께 변경되지 않음을 응답
- 삭제됨 : 404 상태코드와 함께 요청한 자원이 존재하지 않음을 응답
--
'CS > 네트워크' 카테고리의 다른 글
[응용 계층] HTTP (0) | 2024.11.24 |
---|---|
[응용 계층] DNS (0) | 2024.11.23 |
[전송 계층] TCP의 오류, 흐름, 혼잡 제어 (0) | 2024.11.22 |
[전송 계층] TCP와 UDP (0) | 2024.11.21 |
[전송 계층] 전송 계층 (0) | 2024.11.20 |