jhhan의 블로그

HTTP 메시지 본문

HTTP

HTTP 메시지

jhhan000 2021. 12. 12. 22:06

저번 포스트에서는 HTTP에 대해서 알아봤습니다.

이번 포스트에서는 HTTP 메시지에 대해 알아보겠습니다.

 

이전에 한 번 HTTP 메시지에 대해 잠깐 언급한 적이 있는데요.

https://jhhan009.tistory.com/95

 

웹 브라우저의 요청과 흐름

이번 포스트에서는 웹 브라우저의 요청, 흐름에 대해서 알아보겠습니다. 이전 포스트에서는 URL에 대해서 다뤘습니다. 그리고 URL의 예시로 이런 것을 들었죠. https://www.google.com/search?q=hello&hl=ko 그

jhhan009.tistory.com

언급했던 HTTP 메시지에 대해 좀 더 알아보죠.

 

먼저 HTTP 메시지의 구조부터 알아보겠습니다.

  • 크게 4가지 영역으로 구분됩니다.
  • 그리고 Request 메시지와 Response 메시지에 따라 쓰이는 곳이 다를 수도 있습니다.

  • 이런 식으로 쓰입니다.
  • Request 메시지의 경우 Message Body 부분에 다른 데이터가 추가될 수 있습니다.

 

cf.) 그리고 HTTP 메시지의 공식 스펙은

HTTP-message = start-line
                       *( header-field CRLF )
                       CRLF
                       [ message-body ]

이런 식으로 정의되어 있다고 합니다.

 

1. start-line(시작 라인)

시작 라인의 경우 요청 메시지와 응답 메시지가 서로 다릅니다.

1-1. 요청 메시지

요청 메시지에서는 start-line을 request-line이라고도 한다고 합니다.

  • request-line = method SP(공백) request-target SP(공백) HTTP Version CRLF(엔터)
  • method: HTTP 메서드
    ex) GET, POST, PUT, PATCH, DELETE 등
  • request-target: 요청 대상
    보통 absolute-path를 사용한다.
    absolute-path = "/"로 시작
  • HTTP Version: HTTP 버전

1-2. 응답 메시지

응답 메시지에서는 start-line을 status-line이라고도 한다고 합니다.

  • status-line = HTTP-version SP(공백) status-code SP(공백) reason-phrase CRLF(엔터)
  • HTTP-version: HTTP 버전
  • status-code: HTTP 상태 코드
    요청의 성공 & 실패를 나타낸다.
    ex) 200, 400, 500 등
  • reason-phrase: 이유 문구
    사람이 이해할 수 있는 짧은 문구가 들어간다.

 

2. Header(HTTP-header)

사용법은 다음과 같습니다.

  • header-field = field-name ":" OWS field-value OWS
    OWS = 띄어쓰기 허용
  • ex) Host: www.google.com
         Content-Type: text/html;charset=UTF-8
  • 필드 네임 다음에 콜론은 붙여쓰고, 그 다음은 띄어쓰기를 해도 되고 안해도 된다고 합니다.
  • 필드 네임은 대소문자 구분을 하지 않습니다.

그럼 헤더에 들어가는 내용은 무엇일까요?

  • HTTP 전송에 필요한 모든 부가정보
  • message body 내용, message body 크기, 압축, 인증, 요청 클라이언트 정보, 서버 어플리케이션 정보 등
  • 필요시 임의의 헤더를 추가할 수 있음

 

3. empty-line(공백 라인)

말 그대로 공백 라인으로 꼭 비워둬야 합니다.

 

4. message body(HTTP message body)

  • 실제 전송할 데이터가 여기에 들어갑니다.
  • html, text, 이미지, 영상, JSON 등
  • byte로 표현할 수 있는 모든 데이터 전송 가능

 

이렇게 살펴보니 HTTP 메시지는

  • 굉장히 단순한 구조로 되어 있습니다.
  • 그래서 확장도 용이한 편이죠
  • 이런 단순함과 확장성 때문에 전세계적으로 많이 쓰이는 듯 합니다.

 

 

HTTP에 대해서 한번 더 정리해보겠습니다.

  1. HTTP 메시지에 모든 것을 담아서 전송함
  2. HTTP/1.1을 기준으로 학습하기
  3. 클라이언트-서버 구조
  4. Stateless(무상태 프로토콜)
  5. Connectionless(비연결성)
  6. HTTP 메시지가 단순함 & 확장성

이런 특징을 갖는 것이 HTTP라고 볼 수 있겠습니다.

 

 

이렇게 해서 HTTP 메시지에 대한 정리를 끝내겠습니다.

 

 

 

 

 

출처 : 모든 개발자를 위한 HTTP 웹 기본지식 by 김영한

'HTTP' 카테고리의 다른 글

HTTP 메서드(2)  (0) 2022.01.16
HTTP 메서드  (0) 2022.01.16
HTTP 알아보기  (0) 2021.12.12
웹 브라우저의 요청과 흐름  (0) 2021.11.23
URL 분석  (0) 2021.11.20