반응형
HTTP(HyperText Transfer Protocol)란?
하이퍼텍스트(hypertext)는 인터넷에서 사용되는 웹문서 형식(HTML)을 생각하면 이해가 빠르다. 우리가 인터넷에서 사용하는 웹사이트는 종이책 같은 텍스트(text)와 달리 마우스를 누르면 원하는 부분을 이곳저곳 열어갈 수 있다. 사용자는 작가가 정해놓은 한 가지 순서로 글을 읽는 것이 아니라 자기가 원하는 부분만을 선택하여 독서할 수 있다. (문학비평용어사전, 2006. 1. 30., 한국문학평론가협회)
HTTP는 바로 위에서 설명된 hypertext를 전송하는 프로토콜이라고 생각하면된다. 우리가 웹(Web) 브라우저를 키고 링크를 클릭하여 다른 사이트로 접속하는 행위들이 모두 http를 통해서 이루어지는 것이다.
1. HTTP의 구조
HTTP 요청과 응답의 구조는 서로 닮았으며, 그 구조는 다음과 같다.
- 시작 줄(start-line)에는 실행되어야 할 요청, 또는 요청 수행에 대한 성공 또는 실패가 기록되어 있다. 이 줄은 항상 한 줄로 끝난다.
- 옵션으로 HTTP 헤더 세트가 들어간다. 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어간다.
- 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line)이 삽입된다.
- 요청과 관련된 내용(HTML 폼 콘텐츠 등)이 옵션으로 들어가거나, 응답과 관련된 문서(document)가 들어간다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시된다.
HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며, 이와 반대로 HTTP 메시지의 페이로드는 본문(body)이라고 한다.
HTTP 요청형식과 응답형식으로 나누어서 더 세부적으로 HTTP 구조를 확인해 보도록 하자.
1.1 HTTP Request
위의 그림과 아래의 그림을 비교하면서 살펴보도록하자.
HTTP 요청 프로토콜의 형식은 크게 3가지로 구분되며, 각 영역의 구분은 <CR><LF> 즉, [개행] 으로 구분된다.
- Start Line (시작줄)
- Start Line도 세부분으로 나눌 수 있으며, 각 부분은 공백으로 구분된다.
- Method : POST, GET, PUT, DELETE와 같은 기능을 명시한다. ex) GET
- URL : 쿼리스트링을 포함한 URL이 들어가는 부분이다. ex) localhost:8080
- Version : 단어그대로 HTTP의 버전이 들어가는 곳이다. ex) HTTP/1.1
- Start Line도 세부분으로 나눌 수 있으며, 각 부분은 공백으로 구분된다.
- Header (헤더)
- 하나의 Header Line은 "[Header 필드 이름]: [값] [<CR><LF>]" 와 같은 형식으로 한줄을 만든다.
각 Header Line의 구분은 <CR><LF>으로 하며 위에 http 요청 폼 1번그림을 보면 구조를 쉽게 알 수 있다.
위에서 말하는 [SP]는 공백을 말하는것이다.- General 헤더: Via와 같은 헤더는 메시지 전체에 적용된다.(http 2번그림 연두색부분)
- Request 헤더: User-Agent, Accept-Type와 같은 헤더는 요청의 내용을 좀 더 구체화 시키고(Accept-Language), 컨텍스를 제공하기도 하며, 조건에 따른 제약 사항을 가하기도 하면서(If-None) 요청 내용을 수정한다. (http 2번그림 노란부분)
- Entity 헤더: Content-Length와 같은 헤더는 요청 본문에 적용된다. 당연히 요청 내에 본문이 없는 경우 entity 헤더는 전송되지 않는다. (http 2번그림 보라색부분)
- 하나의 Header Line은 "[Header 필드 이름]: [값] [<CR><LF>]" 와 같은 형식으로 한줄을 만든다.
- Body (본문 또는 Data)
- Body(본문)는 요청의 마지막 부분에 들어가며 모든 요청에 포함되는 것은 아니다. GET 처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없다. POST와 같이 서버의 정보를 갱신하기 위해 요청하는 경우에는 Body(본문)에 데이터(보통 HTML 폼 데이터)를 포함하여 요청한다.
- 단일-리소스 본문(single-resource bodies): 헤더 두 개(Content-Type와 Content-Length)로 정의된 단일 파일로 구성됨
- 다중-리소스 본문(multiple-resource bodies): 멀티파트 본문으로 구성되는 다중 리소스 본문에서는 파트마다 다른 정보를 지님. 보통 HTML 폼과 관련이 있음.
- Body(본문)는 요청의 마지막 부분에 들어가며 모든 요청에 포함되는 것은 아니다. GET 처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없다. POST와 같이 서버의 정보를 갱신하기 위해 요청하는 경우에는 Body(본문)에 데이터(보통 HTML 폼 데이터)를 포함하여 요청한다.
1.2 HTTP Response
위의 그림과 아래의 그림을 비교하면서 살펴보도록하자.
HTTP 응답 프로토콜 역시 크게 3가지로 구분되며, 각 영역의 구분은 <CR><LF> 즉, [개행] 으로 구분된다.
- Status Line (상태줄)
- Start Line도 세부분으로 나눌 수 있으며, 각 부분은 공백으로 구분된다.
- Version : 단어그대로 HTTP의 버전이 들어가는 곳이다. ex) HTTP/1.1
- Status Code : 요청의 성공여부를 나타냅니다. ex) 200, 403, 404, 302 등
- Status Phrases : 상태에 대한 정의를 나타냄. ex) Not Found.
- Start Line도 세부분으로 나눌 수 있으며, 각 부분은 공백으로 구분된다.
- Header (헤더)
- HTTP 응답 폼의 헤더구조는 요청 때와 거의 동일하다. 하나의 Header Line은 "[Header 필드 이름]: [값] [<CR><LF>]" 와 같은 형식으로 한줄을 만든다. 구조는 거의 같지만 내부정보는 아래와 같다.
- General 헤더: Via와 같은 헤더는 메시지 전체에 적용된다.(http 2번그림 연두색부분)
- Response 헤더: Vary와 Accept-Ranges와 같은 헤더는 상태 줄에 미처 들어가지 못했던 서버에 대한 추가 정보를 제공한다.(http 2번그림 노란색부분)
- Entity 헤더: Content-Length와 같은 헤더는 요청 본문에 적용됩니다. 당연히 요청 내에 본문이 없는 경우 entity 헤더는 전송되지 않는다.(http 2번그림 보라색부분)
- HTTP 응답 폼의 헤더구조는 요청 때와 거의 동일하다. 하나의 Header Line은 "[Header 필드 이름]: [값] [<CR><LF>]" 와 같은 형식으로 한줄을 만든다. 구조는 거의 같지만 내부정보는 아래와 같다.
- Body (본문 또는 Data)
- HTTP의 응답 폼의 Body(본문)는 요청 폼의 구조와 같다.
자료출처
반응형
'기술' 카테고리의 다른 글
[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 |
댓글