[HTTP] HTTP Header(전송 방식, 일반 정보, 특별한 정보)

Yujeong·2023년 12월 26일
0
post-thumbnail

모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 후, 정리한 글입니다.

목차

  1. 전송 방식
  2. 일반 정보
  3. 특별한 정보

1. 전송방식

1) 단순 전송(Content-Length)

message body에 아무런 처리를 하지 않고, Content-Length만 담아서 그대로 전송하는 것을 말한다.
Content-Length는 content의 길이를 알 수 있을 때 사용한다.

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3577

<html>
    <body>...</body>
</html>

2) 압축 전송(Content-Encoding)

데이터를 압축해서 전송하는 방식으로, 단순 전송에 비하여 데이터의 크기가 작다. 클라이언트에서 해석할 수 있도록 서버는 압축 방식인 Content-Encoding을 보내줘야 한다.

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Content-Length: 337

lkj123kljoidfhjdjfknwndiyg1kjfdij485jdslidjfk98djfkl

3) 분할 전송(Transfer-Encoding)

전송할 데이터의 용량이 클 때, 분할하여 전송한다. 전송되는 청크의 크기는 16진수로 표현된 바이트 수이다.
이때, Content-Length를 담아 보낼 수 없는 이유는 용량이 커서 길이를 예상할 수 없기 때문이다.

Studyhard를 5byte씩 나눠 보낸다면, 다음과 같이 보낼 수 있다. 0 \r\n은 청크의 끝이라는 의미로, 데이터 스트림이 끝났음을 나타낸다.

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

5
Study
4
hard
0
\r\n

4) 범위 전송(Range, Content-Range)

데이터에서 요청받은 범위만 전송한다.

  • 요청: 클라이언트는 Range헤더를 지정해 보낸다.
  • 응답: 서버는 Content-Range헤더로 요청받은 범위와 요청받은 범위의 데이터를 보낸다.
GET /event
Range: byte=1001-2000
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Range: bytes 1001-2000 / 2000

gmlgml78rhdqnduftlagl48gkqtlek874haey



2. 일반 정보

From

유저 에이전트의 이메일 정보

  • 사용 헤더: 요청
  • 목적: 검색엔진
  • 일반적으로 잘 사용되지 않음

Referer

현재 요청된 페이지의이전 웹 페이지 주소

  • 사용 헤더: 요청에서 사용
  • 목적: 유입 경로 분석
  • A→B로 이동하는 경우, B를 요청할 때 Referer: A를 포함해서 요청
  • 많이 사용됨

사실 referrer이 올바른 단어이지만, 이미 referer로 사용하고 있는 서버가 많아 referrer로 수정해버리면 오류가 다수 발생하기 때문에 어쩔 수 없이 오타 그대로 사용하고 있다고 한다.

User-Agent

유저 에이전트 애플리케이션 정보

  • 사용 헤더: 요청
  • 애플리케이션 정보: 웹 브라우저 정보 등
  • 목적: 통계 정보 로그를 통해 어떤 종류의 브라우저에서 장애가 발생하는지 파악
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/
537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36

Server

ORIGIN 서버의 소프트웨어 정보

  • 사용 헤더: 응답
  • ORIGIN 서버: "진짜 나의 요청이 있는 마지막 서버", HTTP 요청을 보내면, 여러 프록시 서버를 거치게 된다. 이때, 실제로 내 요청을 받고 응답해주는 엔트포인트 서버이다.
Server: Apache/2.2.22 (Debian)
server: nginx

Date

메시지가 발생한 날짜와 시간

  • 사용 헤더: 응답
Date: Tue, 26 Dec 2023 08:23:33 GMT



3. 특별한 정보

Host

요청한 호스트 정보(도메인)

  • 사용 헤더: 요청
  • 필수 헤더 ⭐️
  • 사용 목적: 하나의 서버가 여러 도메인을 처리할 때, 하나의 IP 주소에 여러 도메인이 적용되어 있을 때
GET /search?q=http&hl=ko hTTP/1.1
Host: www.google.com
  • 예시
    가상호스트를 통해 여러 도메인을 한번에 처리할 수 있는 서버에서 실제 애플리케이션이 여러개 구동될 수 있다.
    그러나, IP로만 통신하니까 도메인을 구분할 방법이 없다.

    그래서 필요한 것이 Host이다.

Location

페이지 리다이렉션

  • 사용 헤더: 응답
  • 201(Created): Location 값은 요처에 의해 생성된 리소스 URI
  • 3xx(Redirection): Location 값은 요청을 자동으로 리디렉션하기 위한 대상 리소스를 가리킴. 응답 결과에 Location 헤더가 있으면, Location 위치로 자동 이동(redirect)

Allow

허용 가능한 HTTP 메서드

  • 사용 헤더: 응답
  • 405(Method Not Allowed) 응답에 포함
  • Allow: GET, HEAD, PUT

Retry-After

유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

  • 사용 헤더: 응답
  • 503(Service Unavailable): 서비스가 언제까지 불능인지 알려줌
Retry-After: Sun, 31 Dec 2023 23:59:59 GMT (날짜 표기)
Retry-After: 120 (초단위 표기)
profile
공부 기록

0개의 댓글