[NETWORK] HTTP 기본기 정리 (2) - Http 메시지 기본 스펙

한호성·2023년 10월 21일

네트워크-HTTP

목록 보기
2/4

Introduction

Web Network 공부를 기본기부터 다시 정리하고자 합니다.
요번 글에서는, 김영한 님의 Http 강의를 듣고, 정리해야할 내용들을 이어서 정리해보도록 하겠습니다.

HTTP Message 기본 스펙

HTTP 메세지를 구성하는 뼈대부터 알아봅시다.

Start-line (시작라인)
Header (헤더)
Empty line 공백라인(CRLF - 필수 )  
message body (본문)

공식문서 RFC7230을 보시게 되면,
HTTP-message = 

start line
*(header-filed crlf)
crlf
[Message-body]

로 정의되어있습니다. 

#cf) 스펙에 정의된 기호들의 의미

스펙에 정의된 기호들의 의미가 궁금해 찾아보았습니다.

  • 스펙 2번째줄에 있는 *의 의미는 0 이상을 의미하고 여러개가 올 수 있음을 의미합니다.
    (crlf는 개행문자 enter라고 생각하시면 되겠습니다.)

  • Message-body에 써진 대괄호 의미는 선택적인 요소를 의미합니다.
    선택적 사용이 가능하다는 의미입니다.
    이런식으로 구성됩니다. 이렇게 형태를 띄는데 실제 메세지 형태를 보도록 합시다.

HTTP Message 예시

본격적으로 예시를 들어가며 알아봅시다.
HTTP Message는 두가지로 나뉩니다.

  • HTTP 요청 메시지 (Requset -Client Side)
  • HTTP 응답 메시지 (Response - Server Side)

각 HTTP메시지 형태는 Spec을 따르고 상황에 맞춰 스펙대로 다양하게 보낼 수 있습니다.

보통 GET 메시지 같은경우는 본문을 보낼수도 있지만, 서버에 따라 GET의 본문을 처리하지 않는 경우가 있어서, 대체로 본문을 보내지 않고 처리하는 경우가 대부분입니다.

예시를 통해 알아봅시다.

  • GET으로 요청하는 메시지
startLine           :  GET /search?q=heelo HTTP/1.1
*(header-filed crlf):  Host: www.google.com 
crlf                :  공백

다음으로 HTTP 응답 메세지를 보도록 하겠습니다.

  • GET으로 응답하는 메시지

startLine           :  HTTP/1.1 200 OK
*(header-filed crlf):  Content-type:text/html;charset=UTF-8
					:  Content-Length:3423
crlf                :  공백
[Message-Body]      : <html><body>...</body></html>

각 내용에 해당하는 디테일한 것들은 차차 알아가보도록 하겠습니다 :)

위의 두예시를 보시면 spec에 적용되서 잘 나타내지는 것을 볼 수 있습니다.

Message-body부분도 스팩 내용에 맞게 없어도, 있어도 됩니다.

(스팩정리된 기호의 의미를 보면 이것이 스펙에 맞게 작성된 HTTP 메세지라는것을 알 수 있습니다.)

간단한 예시를 봤으니 각 Spec에 디테일한 내용들도 알아보도록 하겠습니다.

start-line (시작라인)

start-line에 대해 알아보겠습니다. (말 그대로 HTTP 메세지의 시작을 나타냅니다)

strat-line 은 request-line(요청시)/status-line(응답시) 두가지로 구성됩니다.

요청시 사용하는 request-line

정해진 형식 : method(공백)request-target(공백)HTTP-versoin(엔터)

위의 요청메시지 예시를 다시 가져와 확인해보겠습니다.

GET /search?q=heelo HTTP/1.1
(method)(공백)(requset-target)(공백)(HTTP-version)(CRLF)

스팩과 동일하다는 것을 알 수 있습니다.

응답시 사용하는 status-line

정해진 형식: HTTP-version(공백)status-code(공백)reason-phrase(CRLF)

위의 응답 메시지 예시를 다시 가져와 확인해보겠습니다.

HTTP/1.1 200 OK
(HTTP-version)(공백)(status-code)(공백)(reason-pharse)(CRLF)

동일한 것을 확인할 수 있습니다.


다음으로 헤더를 알아보겠습니다.

HTTP 헤더

HTTP 전송에 필요한 모든 부가정보를 담고 있습니다.
표준헤더가 굉장히 많으니.. 사용하는거 위주로 추후에 따로 설명하는 글을 작성하도록 하겠습니다.

header-field = field-name":"OWS filed-value OWS
(OWS는 띄어쓰기 허용의 의미를 갖는다. field-name 뒤에는 띄어쓰기 x 주의!)

HTTP 메시지 바디

실제 전송할 데이터
HTML 문서, 이미지, 영상 JSON 등등 byte로 표현할 수 있는 모든 데이터 전송가능...
(사실상 다 가능하다고 생각할 수 있겠다. 컴퓨터의 최소 저장단위는 byte잖아..?)


앞으로 정리할 내용들은 다음과 같습니다.

4 PUT,PATCH 차이 활용법

5 HTTP Post Method 컬렉션 방식, 스토어 방식

6 HTTP 상태코드 정리

7 HTTP 헤더별 정리

8 쿠기 개념 간단정리

이어서 또 정리하도록 하겠습니다.
감사합니다 :)

Reference

모든 개발자를 위한 HTTP 웹 기본 지식

profile
개발자 지망생입니다.

0개의 댓글