우클릭방지

글 목록

2017년 7월 14일 금요일

[HTTP 프로토콜 강좌]#10 HTTP 요청/응답 메시지 구조

HTTP 헤더에 대해 논하기 앞서 HTTP 메시지의 구조를 먼저 알고 가면 좋을 것 같다는 생각이 든다. HTTP 메시지 구조를 알아야 우리가 학습한 Method, 헤더의 내용들, 클라이언트와 웹서버간 전달되는 실제 데이터 내용들이 어떤 형식으로 구성되어 전달되는 지 파악할 수 있기 때문이다.

그래서 오늘 포스팅은 "HTTP 요청과 응답 메시지의 구조"에 대해서 이야기를 해 보려한다.. 
HTTP는 클라이언트 - 서버간 프로토콜이며 요청은 클라이언트에서, 응답은 서버에서 주로 이루어진다. 

HTTP 요청

HTTP 요청 메시지 구조는 아래와 같다. 


맨 위에 요청라인(Request-Line)이 있고, 요청라인 다음 줄에는 HTTP 헤더 정보가 포함된다. 
헤더와 메시지 바디 사이에는 공백 한줄이 존재하는데, 이 한줄로 헤더와 바디를 구분한다. 

실제 HTTP 요청 메시지를 살펴보면 다음과 같다. 
테스트 웹 서버 (192.168.211.39)의 메인 페이지를 접속한 예이다. 

제일 윗줄에 GET 부터 HTTP/1.1 까지가 요청라인(Request-Line) 이다. 
요청라인은 다음과 같이 구성된다. 
  • 요청 방식 (Method)
  • 요청 URI
  • HTTP 버젼
3가지 정보가 요청라인에 포함되게 되며, 정보간 구분은 공백(Space)으로 한다. 
위 예를 가지고 설명하자면.. 
  • 요청방식 : GET
  • 요청 URI : /  (Root Directory)
  • HTTP 버젼 : 1.1
HTTP 버젼의 앞 숫자 1은 메이저(Major) 버젼이며, 소수점 뒷 숫자는 마이너(Minor) 버젼이다. 메이져 버젼의 경우 프로토콜에서 큰 변화가 있는 경우 변경이 되며, 마이너 버젼은 소소한 변화가 반영되었을때 변경된다. 

요청라인 이후 HTTP 헤더 정보들이 포함되는데 헤더에 대한 자세한 내용은 이후 포스팅을 참고하면 좋겠다. 

요청라인과 헤더정보 다음엔 메시지 바디가 위치하게 되는데, 헤더와 바디 사이에 공백이 존재한다. 
공백은 HTTP 헤더의 종료를 의미하기도 하고, 바디의 시작을 뜻하기도 한다. 
바디부부에는 웹서버로 전달하고자 하는 사용자 데이터가 흔히 포함된다. 우리가 로그인 창에 아이디와 패스워드를 입력하게 전달하고자 할때, 바로 이 바디 부분에 입력데이터를 포함하여 전송한다. 





HTTP 응답

HTTP 응답 메시지 구조는 다음과 같다. 


위 그림과 같이 HTTP 응답 메시지는 상태라인(Status-Line), 헤더, 바디로 구분된다. 제일 윗부분의 상태라인 부분을 제외하면 HTTP 요청 메시지 구조와 비슷하다. 

실제 HTTP 응답 메시지 내용을 들여다 보자.
위에서 예로 든 HTTP 요청 메시지에 대한 응답 데이터이다. 


요청과 마찬가지로 응답의 제일 윗부분에 상태 라인(Status-Line)이 존재한다. 
상태 라인은 다음 항목으로 구성된다. 
  • HTTP 버젼
  • 상태 코드
  • 응답 이유
응답도 역시 3가지 정보가 공백으로 구분되어 있다. 
위 예로 보면...
  • HTTP 버젼 : 1.1
  • 상태 코드 : 200
  • 응답 이유 : OK
인데, 버젼은 요청에서 이야기한 것과 같고 상태 코드는 숫자 3자리로 이루어져있다.  예제에서의 200 코드는 사용자가 요청한 데이터를 정상적으로 전달했다는 의미이다. 
상태코드는 다음 포스팅에서 좀 자세히 다뤄보도록 하겠다. 

응답 이유는 흔히 상태 코드와 연관되어 있다. 상태 코드를 사람이 이해할 수 있는 언어로 표시한 것이기 때문이다. 

상태 라인 이후에 Date 부터 Content-Type 까지 헤더 정보들이 나오게 되고, 그 다음에 공백 한줄이 있은 후에 메시지 바디의 내용이 포함되어 있다. 

여기까지 HTTP 요청과 응답의 메시지 구조를 알아 보았다. 
이해하는데 크게 어려움 없었으리라 생각된다.

오늘 내용을 정리하면..

  • HTTP 요청 메시지의 구조는 "요청 라인 (Request-Line), 헤더, 바디" 로 구성되어 있으며, 헤더와 바디 사이에는 이를 구분하기 위해 공백(Space)가 포함된다. 
    • 요청라인은 다음 3가지 정보로 이루어져 있다.
      • Method
      • URI
      • 버젼
  • HTTP 응답 메시지의 구조도 요청 메시지와 비슷하다. "상태 라인(Status-Line), 헤더, 바디"로 이루어져 있으며, 여기서도 헤더와 바디를 구분하기 위해 공백이 존재한다. 
    • 상태 라인은 다음 3가지 정보로 이루어져 있다. 
      • 버젼
      • 상태 코드
      • 이유
끝~

댓글 5개:

  1. 다른 블로그에서 이미지랑 텍스트 설명이 똑같은 글을 보고 와서 전달드립니다.
    같은 분이면 상관없는데 혹시나 무단 도용인가 싶어서요.
    https://juyoung-1008.tistory.com/9

    답글삭제
    답글
    1. 제보 감사드립니다. 무단 도용이네요~

      삭제
  2. 안녕하십니까? 블로그 주인장님! 윗분의 댓글을 읽고 뜨끔해져서 자진신고 합니다.
    저 또한 많은 부분을 인용하여 글을 작성하였는데, 문제가 되는지 궁금하네요.
    만약, 그러시다면 자삭을 하겠습니다.
    https://self-edu.tistory.com/7

    답글삭제
    답글
    1. 네. 이미지 하나 하나 수고스럽게 만든 것들이라 삭제 해 주시면 좋겠네요~
      윗분은 경고 했으나 답이 없으셔서 티스토리에 도용으로 신고하여 조치 받았습니다.

      삭제
    2. 위 링크로 블로그 방문해봤는데.. 링크로 대체하신거면 상관없습니다.
      이미지나 글을 직접 캡쳐하거나 카피해서 붙이신 경우에만 해당되는 사항이에요~

      삭제