봄디의 개발일지
[HTTP] HTTP 헤더 - 일반 헤더 (전송 방식 / 일반 정보 / 특별한 정보) 본문
1️⃣ 전송 방식
전송 방식은 크게 4가지로 나뉩니다.
- 단순 전송
- 압축 전송
- 분할 전송
- 범위 전송
✅ 단순 전송 (Content-Length)
단순 전송은 요청을 하면 메시지 바디에 대한 Content-Length 를 지정하는 것을 말합니다.
단순하게 요청을 하고, 한 번에 응답을 받는 방식을 의미합니다.
✅ 압축 전송 (Content-Encoding)
서버에서 gzip 같은 걸로 압축을 진행했을 때 어떤 걸로 압축을 진행했는 지에 대한 정보를 Content-Encoding 으로 알려줍니다. 그래야 클라이언트에서 응답을 받았을 때 압축된 정보를 알고 풀어서 사용할 수 있습니다.
✅ 분할 전송 (Transfer-Encoding)
Transfer-Encoding: chunked 라고 있으면 chunk 는 덩어리라는 의미를 가지고 있으므로 덩어리로 쪼개서 보낼 것이라는 것을 의미합니다.
위의 예에서는 5 byte 인 Hello 를 먼저 보내고, 그 다음에 5 byte 인 World 를 보낸다는 것을 의미합니다.
마지막으로 0 으로 표시하고 엔터를 쳐서 보내면 끝이라는 의미합니다.
용량이 큰 무언가를 전송할 때 한 번에 보내게 되면 오랫동안 기다려야할 수 있는데 분할해서 전송하면 오는 대로 바로 표시할 수 있습니다.
분할 전송은 전체의 Content 의 길이를 예상할 수 없기 때문에 분할 전송에서는 Content-Length 를 보내면 안됩니다.
✅ 범위 전송 (Range, Content-Range)
만약 클라이언트에서 요청한 정보들을 응답하고 있는 와중에 연결이 끊겨서 다시 전송해야하는 경우, 모든 내용을 다시 전송하려면 용량 낭비의 문제가 발생할 수 있습니다.
이 때, Range 로 범위를 지정하여 요청할 수 있습니다. 그러면 서버에서는 Content-Range 로 보내는 데이터의 범위를 표시하고, 끝길이를 추가하여 응답할 수 있습니다.
2️⃣ 일반 정보
- From : 유저 에이전트의 이메일 정보
- Referer : 이전 웹 페이지 주소 (⭐ 많이 사용됨)
- User-Agent : 유저 에이전트 애플리케이션 정보
- Server : 요청을 처리하는 Origin 서버의 소프트웨어 정보
- Date : 메시지가 생성된 날짜
✅ From : 유저 에이전트의 이메일 정보
From 은 일반적으로는 잘 사용되지 않고, 검색 엔진 같은 곳에서 주로 사용합니다.
From 은 요청에서 사용하는 정보입니다.
✅ Referer : 이전 웹 페이지 주소
Referer 는 현재 요청된 페이지의 이전 웹 페이지의 주소를 나타냅니다.
A ➡ B 로 이동하는 경우 B를 요청할 때 Referer : A 를 포함해서 요청합니다.
이 Referer 를 사용해서 유입 경로를 분석할 수 있고, 요청에서 사용하는 정보입니다.
✅ User-Agent : 유저 에이전트 애플리케이션 정보
클라이언트의 애플리케이션 정보나 통계 정보 등을 담고 있습니다.
User-Agent 를 통해서 어떤 종류의 브라우저에서 장애가 발생하는 지를 파악할 수 있고 요청에서 사용하는 정보입니다.
✅ Server : 요청을 처리하는 Origin 서버의 소프트웨어 정보
Origin 서버란, 실제 클라이언트의 요청을 처리하는 서버를 이야기합니다.
클라이언트에서 서버로 요청을 보낼 때 바로 Origin 서버로 전달되는 것이 아닌, 중간에 캐시 서버, 프록시 서버 등등 많은 서버들을 거쳐가게 됩니다.
따라서 최종적으로 클라이언트의 응답을 처리하는 서버를 Origin 서버라고 합니다.
server: nginx 같은 식으로 Origin 서버의 스포트웨어 정보를 제공하며 server 는 응답에서 사용하는 정보입니다.
✅ Date : 메시지가 발생한 날짜와 시간
Date: Tue, 15 Nov 1994 08:12:31 GMT 이렇게 사용할 수 있으며 Date는 응답에서 사용하는 정보입니다.
3️⃣ 특별한 정보
- Host : 요청한 호스트 정보 (도메인) (⭐ 중요)
- Location : 페이지 리다이렉션
- Allow : 허용 가능한 HTTP 메서드
- Retry-After : 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
✅ Host : 요청한 호스트 정보(도메인)
Host 는 요청에서 사용하며, 필수값입니다.
Host 는 하나의 서버가 여러 도메인을 처리해야 할 때 사용하거나, 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 사용됩니다.
위의 그림에서 만약 Host 정보가 없다면 /hello 를 클라이언트가 요청을 했을 때 서버입장에서는 /hello 에서 aaa.com 에 들어가야할 지, bbb.com 에 들어가야 할지를 구분할 정보가 없습니다. (IP 로만 통신을 하기 때문입니다. )
따라서 Host 정보는 반드시 넣어줘야 합니다.
✅ Location : 페이지 리다이렉션
웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동합니다. (리다이렉트라고 부릅니다.)
201 (Created) : Location 값은 요청에 의해 생성된 리소스 URI 를 나타내며,
3xx (Redirection) : Location 값은 요청을 자동으로 리다이렉션 하기 위한 대상 리소스를 가리킵니다.
✅ Allow : 허용 가능한 HTTP 메서드
url 경로는 존재하는데 만약 post 는 제공을 하지 않고, get, put, head 만 제공을 하는 경우 HTTP 405 오류를 내리면서 응답에 header 값을 Allow: GET, HEAD, PUT 이라고 넣고 클라이언트에게 알려줍니다.
(서버에 많이 구현되어 있지는 않습니다.)
✅ Retry-After : 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
만약 503 (Service Unavailable) 서비스가 불능의 상태일 때
Retry-After: Fri, 31 Dec 1999 23:59:59 GMT 이렇게 날짜를 표기하거나,
Retry-After: 120 이렇게 초 단위로 표기를 해서 언제까지 서비스가 불능인지 알려줍니다.
(잘 사용하지는 않습니다.)
🔍 참고글
인프런 김영한 강사님의 [모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 8. HTTP 헤더1 - 일반 헤더 강의를 참고하여 작성했습니다.
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 헤더 - 캐시의 기본 동작 (검증 헤더 Last-Modified) (3) | 2024.10.20 |
---|---|
[HTTP] HTTP 헤더 - 쿠키 (1) | 2024.10.13 |
[HTTP] HTTP 헤더 - 일반 헤더 (표현/협상) (4) | 2024.10.06 |
[HTTP] HTTP 메서드 활용 (2) | 2024.09.29 |
[HTTP] HTTP 상태코드 (100~500대 상태코드 총정리) (0) | 2024.09.29 |