article thumbnail image
Published 2023. 5. 15. 00:15

들어가며

  • 이전 포스트에서 HTTP의 정의와 성질에 대해 알아보았다.
  • 이번 포스트에서는 HTTP 메시지의 구조와 각 파트별에 대해 간략하게 알아본다.
 

HTTP - HTTP의 뜻과 특성

들어가며 이전 포스트에서는 리소스를 식별할 수 있는 방법인 URI에 대해 알아보았다. 이번 포스트에서는 웹 개발에서 가장 핵심적인 프로토콜이라고 할 수 있는 HTTP에 대해 알아보도록 한다. HTT

sehun5515.tistory.com

 

 

 

HTTP 메시지

  • 이전 포스트에서 HTTP의 특성 중 하나로 클라이언트 - 서버 구조가 있었다. 이는 클라이언트가 어떤 데이터에 대해 요청(Request)을 하면 서버가 그 요청을 받고 요청에 대한 동작을 수행한 뒤, 그 결과를 클라이언트에게 다시 응답(Response)하는 구조를 뜻한다.
  • 이때, 클라이언트가 서버를 동작시키기 위해서는 요청을 보내야 하고 이때 요청의 내용은 메시지로 담을 수 있다. 반대로 서버에서 요청에 대한 결과를 클라이언트에게 응답으로 보낼 때에도 메시지로 담아 보낼 수 있다.
  • HTTP 메시지는 이 클라이언트와 서버간 오가는 요청과 응답에 사용되는 요소로 HTTP를 사용하는 클라이언트 - 서버는 이 HTTP 메시지를 사용하여 통신한다.

HTTP 메시지 - 요청 메시지
HTTP 메시지 - 응답 메시지

HTTP 메시지의 구조

  • 위의 그림이 HTTP 메시지의 구조를 나타내고 있다.
  • HTTP 메시지는 크게 다음과 같은 요소들로 이루어져 있다.
    • Start-Line (시작 라인)
    • HTTP message header (메시지 헤더)
    • CRLF (한줄 개행)
    • HTTP message body (메시지 본문)

 

 

 

HTTP 메시지의 각 부분

  • 위에서 보았던 HTTP 메시지의 각 부분에 대해 살펴보도록 한다.

Start - Line (시작 라인)

  • 시작 라인은 HTTP 메시지가 요청(Request)과 관련된 메시지인지 또는 응답(Response)에 대한 메시지인지에 따라 달라진다.
  • 먼저 요청(Request) 메시지일 경우에 시작 라인은 다음과 같은 형태로 작성된다.
    • [HTTP method] SP(공백) [request-target] SP [HTTP-version] CRLF(개행)
      • HTTP method는 서버가 수행해야 할 동작을 지정하는 메서드로 GET, POST, PUT, DELETE, PATCH로 총 5개가 존재한다. 이 부분에서 서버가 수행할 동작을 지정한다.
      • [request-target]은 요청 대상을 의미하며 절대경로("/"로 시작하는 경로)를 의미한다. GET 방식의 경우에 절대경로 뒤에 ?로 시작하는 쿼리 스트링(query-string)이 들어간다.
      • [HTTP-version]은 현재 이 HTTP의 버전을 나타내며 일반적으로 1.1버전이 들어간다.
  • 응답(Response) 메시지일 경우에는 다음과 같은 시작 라인을 가진다.
    • [HTTP-version] SP [Status-Code] SP [reason-phrase] CRLF
      • HTTP-version은 위와 동일한 것으로 설명은 생략한다.
      • Status-Code는 해당 요청이 성공했는지, 실패했는지를 나타내며 다음과 같은 번호대로 분류된다.
        • 2xx - 해당 요청이 성공했음을 나타낸다.
        • 4xx - 클라이언트에서 잘못된 요청을 서버로 보냈을 경우 반환되는 코드이다.
        • 5xx - 서버에서 문제가 발생했을 때 반환되는 코드이다.
      • reason-phrase는 해당 코드에 대해 사람이 이해할 수 있는 짧은 코드 설명 글로 예를 들어 200번의 경우 OK라고 표시되며 해당 코드의 뜻이 OK로 서버가 해당 요청을 성공적으로 접수했다는 설명을 나타낸다.

HTTP 헤더

  • 헤더 부분은 다음과 같은 구조를 가진다.
    • header-field = [field-name] ":" OWS [field-value] OWS    (OWS : 띄어쓰기 허용)
      • 예를 들어 Host의 경우 Host: www.google.com도 가능하고, Host:www.google.com도 가능하다는 의미이다.
  • HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담아두는 곳이다.
    • 여기서 부가정보란 메시지 바디의 내용 타입, 메시지 바디의 크기, 인증, 요청 클라이언트 정보, 캐시 정보, 쿠키 정보 등등이 존재한다.
  • HTTP 헤더는 표준 헤더가 매우 많이 존재하며 만약 필요시에 임의의 헤더도 추가가 가능하다.

CRLF(개행문)

  • 헤더와 바디를 구분하기 위해 넣은 개행문이다.

HTTP 바디

  • HTTP 메시지 바디는 실제로 전송할 데이터가 들어가는 부분이다.(Payload라고도 부른다.)
  • 해당 부분에는 byte로 표현이 가능한 모든 데이터가 들어갈 수 있으며 보통 HTML, 이미지, 영상, Json, XML이 들어간다.
  • 만약 API를 담당한다면 응답 메시지 바디에 JSON이 들어갈 것이고, 웹 어플리케이션이라면 요청에 따라 가공된 HTML이 들어갈 것이다.

 

 

 

정리

  • HTTP 메시지는 매우 단순한 구조를 가지며 시작 라인, HTTP 헤더, 개행줄과 HTTP 바디로 나누어질 수 있다.
  • 이러한 단순한 구조 덕분에 이해하기도 쉽고 그에 따른 확장도 매우 간편하다(헤더의 경우 우리가 임의로 확장을 시킬 수 있단 것을 생각하자)
  • 다음 포스트에서는 요청에서 쓰이는 HTTP method에 대해 알아본다.

'CS > HTTP' 카테고리의 다른 글

HTTP - HTTP 메서드  (0) 2023.05.17
HTTP - HTTP API 설계와 HTTP메서드  (0) 2023.05.15
HTTP - HTTP의 뜻과 특성  (0) 2023.05.13
HTTP - URI의 개념  (0) 2023.05.11
HTTP - 인터넷 통신 기초  (0) 2023.05.09
복사했습니다!