Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[HTTP] HTTP 헤더 - 일반 헤더 (전송 방식 / 일반 정보 / 특별한 정보) 본문

HTTP

[HTTP] HTTP 헤더 - 일반 헤더 (전송 방식 / 일반 정보 / 특별한 정보)

bomdy 2024. 10. 13. 20:52

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 는 요청에서 사용하며, 필수값입니다. 

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 - 일반 헤더 강의를 참고하여 작성했습니다.