HTTP 메세지

[Network] HTTP 메세지


본 내용은 MDN HTTP 메세지를 보고 공부, 정리한 내용입니다.

HTTP 메세지란?

서버와 클라이언트가 HTTP로 데이터를 주고받기 위해 사용되는 방식이다. 기본적으로 HTTP 메세지는 ASCII 코드로 인코딩된 텍스트 정보이며, HTTP /0.9와 HTTP /1.1에서는 메세지가 사람이 읽을 수 있는 형태이고, HTTP /2에서는 최적화 및 성능 향상을 위해 바이너리 프레임으로 나뉘어 전송된다. (By 이진 프레이밍 매커니즘)

HTTP 메세지의 구성

HTTP 메세지는 요청, 응답 두 가지 종류가 있다. HTTP 메세지 형식은 시작줄, 헤더, 본문 이렇게 3가지로 나뉘고, 해당 메세지가 요청이냐 응답이냐에 따라 메세지 내용에서 차이가 있다.

  • 시작줄
    시작줄에는 실행되어야 할 요청, 또는 요청에 대한 결과 (성공 or 실패) 가 적혀있다. 이 줄은 항상 한 줄로 끝난다.

  • 헤더
    요청에 대한 설명 혹은 메세지 본문에 대한 설명을 의미한다. 헤더와 본문을 구분짓기 위해, 헤더가 끝나면 빈 줄 하나를 삽입한다.

  • 본문
    요청과 관련된 내용 (POST 요청의 경우 HTML 폼) 혹은 응답과 관련된 문서 (GET 으로 어떤 페이지 요청 시 응답으로 해당 페이지의 HTML 코드가 본문에 담겨 전달된다.)

위 내용을 요청 메세지, 응답 메세지로 나누어 조금 더 자세히 살펴보자.

HTTP 요청 메세지

시작줄

시작줄의 첫 번째에는 요청 메서드 (GET, POST, PUT, HEAD, OPTIONS 등..) 가 위치한다.

각 메서드의 의미는 간단하게 요약하면 아래와 같다.

  • GET
    서버로부터 요청한 URI에 대한 리소스를 받는다.

  • POST
    서버에게 (주로 새로 삽입할) 데이터를 전달한다.

  • PUT
    서버에게 (주로 갱신할) 데이터를 전달한다.

  • HEAD
    GET과 거의 동일하나, 응답에 BODY가 없고 응답코드와 HEAD만 응답받는다. 웹서버의 버전, 정보확인, 최종 수정일자 등을 확인하기 위해 사용된다.

  • OPTIONS
    웹서버에서 지원하는 메서드의 종류를 파악하기 위해 사용한다.

두 번째 부분에는 주로 URL, 또는 프로토콜, 포트 도메인의 절대 경로 등이 위치한다. HTTP 메서드에 따라 여기에 위치하는 값의 형식이 조금씩 달라진다.

  • origin 형식
    URL끝에 ‘?’ 및 쿼리가 오는 형식이다. GET, POST, HEAD, OPTIONS와 함께 사용될 수 있다.

  • absolute 형식
    완전한 URL 형태이다. 주로 프록시 서버에 요청할 때 대부분 GET 메서드와 함께 사용된다.

  • authority 형식
    도메인 이름 + 옵션 포트 형식이다. HTTP 터널을 구축할 때 CONNECT 메서드와 함께 쓰인다. ex) CONNECT http://developer.mozila.org:80 HTTP /1.1

  • asterisk 형식
    주로 OPTIONS 메서드와 함께 사용된다. 해당 서버 전체를 뜻한다. ex) OPTIONS * HTTP/1.1

세 번째 부분에 HTTP 버전 정보가 위치한다. 메세지의 남은 구조를 결정하는데 사용된다.

헤더

[헤더: 헤더내용] 형식의 여러 헤더들이 존재할 수 있는 공간이다.
하나의 헤더와 그 헤더의 내용은 한 줄로 표현된다.
헤더는 크게 3가지로 나눌 수 있다.

1. General 헤더

요청 메세지 전체에 적용되는 헤더이다. ex) Connection: keep-alive

2. Request 헤더

요청의 내용을 좀 더 상세히 해주는 헤더이다. ex) User-Agent 헤더나 Accept-Type, Accept-Language, Accept-Encoding 등의 내용을 통해 요청을 보낸 브라우저가 어떤 형태의 데이터를 받아야 하는지를 서버에게 알려줄 수 있다.

3. Entity 헤더

요청 메세지 본문에 적용되는 헤더이다. 본문의 길이 (Content-Length), 본문의 타입 (Content-Type) 헤더 등이 여기에 속한다. 만약 요청 메세지에 본문이 없다면, Entity 헤더도 없을 것이다.

본문

요청의 마지막에 위치한다. 주로 POST, PUT 메서드와 같이 클라이언트가 서버에게 데이터를 전달해야 할 때 본문 내용이 존재한다.

HTTP 응답 메세지

HTTP 응답 메세지의 형식은 요청 메세지와 거의 비슷하나, 내용면에서 조금 차이가 있다. 요청 메세지와 중복되는 내용은 생략하고, 어떤 내용이 다른가를 살펴보자.

상태줄

HTTP 요청 메세지의 시작줄을 응답 메세지에선 상태줄이라 부른다. 상태줄의 구성은 아래와 같다.

1
HTTP/1.1 200 OK

앞에서부터 HTTP 버전, 상태 코드, 상태 메세지이다.

상태 코드

상태 코드는 요청에 대해 서버의 처리 상태 (성공 or 실패) 를 알려준다.

상태 코드는 세자리로 이루어지며, 가장 왼쪽의 숫자가 응답의 클래스 (어떤 타입의 응답인지) 를 의미한다. 각 클래스가 의미하는 바는 간단하게 아래와 같다.

  • 1xx (조건부 응답)
  • 2xx (성공)
  • 3xx (리다이렉션)
  • 4xx (클라이언트 오류)
  • 5xx (서버 오류)

상태 코드의 종류와 그들이 의미하는 바를 자세히 살펴보고 싶다면 아래 사이트를 참고하자.
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
https://ko.wikipedia.org/wiki/HTTP_상태_코드

상태 메세지

상태 메세지는 상태 코드에 대한 간략한 설명이다. 위 사이트에 상태 메세지에 대한 설명도 함께 나와 있다.

헤더

HTTP 응답 헤더는 요청 메세지의 헤더와 구조는 똑같다. General, Response, Entity 헤더로 나눌 수 있고, 응답 메세지에서만 등장하는 헤더들은 Response 헤더에 속한다. 이들은 상태줄에서 미처 설명하지 못한 서버에 대한 추가 정보를 제공한다.

0%