본문 바로가기
기술

[HTTP] HTTP/1.1(HyperText Transfer Protocol)의 구조

by dbjh 2020. 2. 4.
반응형
HTTP(HyperText Transfer Protocol)란?
하이퍼텍스트(hypertext)는 인터넷에서 사용되는 웹문서 형식(HTML)을 생각하면 이해가 빠르다. 우리가 인터넷에서 사용하는 웹사이트는 종이책 같은 텍스트(text)와 달리 마우스를 누르면 원하는 부분을 이곳저곳 열어갈 수 있다. 사용자는 작가가 정해놓은 한 가지 순서로 글을 읽는 것이 아니라 자기가 원하는 부분만을 선택하여 독서할 수 있다. (문학비평용어사전, 2006. 1. 30., 한국문학평론가협회)
HTTP는 바로 위에서 설명된 hypertext를 전송하는 프로토콜이라고 생각하면된다. 우리가 웹(Web) 브라우저를 키고 링크를 클릭하여 다른 사이트로 접속하는 행위들이 모두 http를 통해서 이루어지는 것이다.

 

1. HTTP의 구조

http 구조

HTTP 요청과 응답의 구조는 서로 닮았으며, 그 구조는 다음과 같다.

  1. 시작 줄(start-line)에는 실행되어야 할 요청, 또는 요청 수행에 대한 성공 또는 실패가 기록되어 있다. 이 줄은 항상 한 줄로 끝난다.
  2. 옵션으로 HTTP 헤더 세트가 들어간다. 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어간다.
  3. 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line)이 삽입된다.
  4. 요청과 관련된 내용(HTML 폼 콘텐츠 등)이 옵션으로 들어가거나, 응답과 관련된 문서(document)가 들어간다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시된다.

HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며, 이와 반대로 HTTP 메시지의 페이로드는 본문(body)이라고 한다.

HTTP 요청형식과 응답형식으로 나누어서 더 세부적으로 HTTP 구조를 확인해 보도록 하자.

1.1 HTTP Request

http request form 1번 그림

위의 그림과 아래의 그림을 비교하면서 살펴보도록하자.

http request form 2번 그림

HTTP 요청 프로토콜의 형식은 크게 3가지로 구분되며, 각 영역의 구분은 <CR><LF> 즉, [개행] 으로 구분된다.

  1. Start Line (시작줄)
    • Start Line도 세부분으로 나눌 수 있으며, 각 부분은 공백으로 구분된다.
      • Method : POST, GET, PUT, DELETE와 같은 기능을 명시한다. ex) GET
      • URL : 쿼리스트링을 포함한 URL이 들어가는 부분이다. ex) localhost:8080
      • Version : 단어그대로 HTTP의 버전이 들어가는 곳이다. ex) HTTP/1.1
  2. Header (헤더)
    • 하나의 Header Line은 "[Header 필드 이름]: [값] [<CR><LF>]" 와 같은 형식으로 한줄을 만든다.
      각 Header Line의 구분은 <CR><LF>으로 하며 위에 http 요청 폼 1번그림을 보면 구조를 쉽게 알 수 있다.
      위에서 말하는 [SP]는 공백을 말하는것이다.
      • General 헤더: Via와 같은 헤더는 메시지 전체에 적용된다.(http 2번그림 연두색부분)
      • Request 헤더: User-AgentAccept-Type와 같은 헤더는 요청의 내용을 좀 더 구체화 시키고(Accept-Language), 컨텍스를 제공하기도 하며, 조건에 따른 제약 사항을 가하기도 하면서(If-None) 요청 내용을 수정한다. (http 2번그림 노란부분)
      • Entity 헤더: Content-Length와 같은 헤더는 요청 본문에 적용된다. 당연히 요청 내에 본문이 없는 경우 entity 헤더는 전송되지 않는다. (http 2번그림 보라색부분)
  3. Body (본문 또는 Data)
    • Body(본문)는 요청의 마지막 부분에 들어가며 모든 요청에 포함되는 것은 아니다. GET 처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없다. POST와 같이 서버의 정보를 갱신하기 위해 요청하는 경우에는 Body(본문)에 데이터(보통 HTML 폼 데이터)를 포함하여 요청한다.
      • 단일-리소스 본문(single-resource bodies): 헤더 두 개(Content-Type와 Content-Length)로 정의된 단일 파일로 구성됨
      • 다중-리소스 본문(multiple-resource bodies): 멀티파트 본문으로 구성되는 다중 리소스 본문에서는 파트마다 다른 정보를 지님. 보통 HTML 폼과 관련이 있음.

 

1.2 HTTP Response

http response form 1번 그림

위의 그림과 아래의 그림을 비교하면서 살펴보도록하자.

http reponse form 2번 그림

HTTP 응답 프로토콜 역시 크게 3가지로 구분되며, 각 영역의 구분은 <CR><LF> 즉, [개행] 으로 구분된다.

  1. Status Line (상태줄)
    • Start Line도 세부분으로 나눌 수 있으며, 각 부분은 공백으로 구분된다.
      • Version : 단어그대로 HTTP의 버전이 들어가는 곳이다. ex) HTTP/1.1
      • Status Code : 요청의 성공여부를 나타냅니다. ex) 200, 403, 404, 302 등
      • Status Phrases : 상태에 대한 정의를 나타냄. ex) Not Found.
  2. Header (헤더)
    • HTTP 응답 폼의 헤더구조는 요청 때와 거의 동일하다.  하나의 Header Line은 "[Header 필드 이름]: [값] [<CR><LF>]" 와 같은 형식으로 한줄을 만든다. 구조는 거의 같지만 내부정보는 아래와 같다.
      • General 헤더: Via와 같은 헤더는 메시지 전체에 적용된다.(http 2번그림 연두색부분)
      • Response 헤더: Vary와 Accept-Ranges와 같은 헤더는 상태 줄에 미처 들어가지 못했던 서버에 대한 추가 정보를 제공한다.(http 2번그림 노란색부분)
      • Entity 헤더: Content-Length와 같은 헤더는 요청 본문에 적용됩니다. 당연히 요청 내에 본문이 없는 경우 entity 헤더는 전송되지 않는다.(http 2번그림 보라색부분)
  3. Body (본문 또는 Data)
    • HTTP의 응답 폼의 Body(본문)는 요청 폼의 구조와 같다.

 

 

자료출처

 

HTTP 메시지

HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메시지 타입은 두 가지가 있습니다. 요청(request)은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지고, 응답(response)은 요청에 대한 서버의 답변입니다.

developer.mozilla.org

 

HTTP의 이해

이번 포스팅은 기존에 만들어 놓은 자료를 활용해서 HTTP에 대해서 이야기 해보고자 한다. HTTP 개요 Hyper Text Transfer Protocol Application Level Protocol Protocol used WWW...

dongdonga.blogspot.com

 

HTTP 헤더

HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해줍니다. HTTP 헤더는 대소문자를 구분하지 않는 이름과 콜론 ':' 다음에 오는 값(줄 바꿈 없이)으로 이루어져있습니다. 값 앞에 붙은 빈 문자열은 무시됩니다.

developer.mozilla.org

 

반응형

'기술' 카테고리의 다른 글

[Kafka] Apache Kafka란?  (0) 2020.05.26
[Naming Convention] 네이밍 컨벤션 케이스별 정리  (0) 2020.03.02
[RESTful API] 설계 방법  (0) 2020.01.16
DNS  (0) 2019.11.13
WAS(Web Application Service) 구조  (0) 2019.11.13

댓글