본문 바로가기
서버 기본상식

HTTP messages

by 왕밤 2021. 9. 2.

 

HTTP 메시지는 HTTP에서 핵심적인 역할을 합니다.

메시지 구조는 단순하게 이루어져 있으며, 확장성도 매우 좋습니다.

HTTP/2 프레이밍 메커니즘 덕분에 

HTTP/1.x 구문과 기저가 되는 전송 프로토콜 사이에 새로운 중간 단계가 추가 되었습니다. 

프로토콜을 자체적으로 수정하지 않고 이미 입증된 메커니즘을 바탕으로 이뤄낸 것입니다.

 

 

 

HTTP란?

 

HyperText Transfer Protocol

 

∙ HTML과 같은 문서를 전송하기 위한 Application Layer 프로토콜

∙ HTTP는 웹 브라우저와 웹 서버의 소통이 목적

∙ 전통적인 클라이언트-서버 모델

   클라이언트가 HTTP messages 양식에 맞춰 요청을 보내면, 서버도 HTTP messages 양식에 맞춰 응답

∙ HTTP는 특정 상태를 유지하지 않는 특징있음 Stateless(무상태성)

 

 

HTTP messages란?

 

클라이언트와 서버 사이에서 데이터가 교환되는 방식 

구성 파일, API, 기타 인터페이스에서 HTTP messages를 자동으로 완성

 

 

HTTP message 유형

 

∙ 요청(Requests)

  클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지

 

∙ 응답(Responses)

  요청에 대한 서버의 답변

 

 

HTTP message 구조

 

- 스타트 라인(start line)

- 헤드(head)

   start line + HTTP headers

   start line = 요청이나 응답의 상태 / 응답에서는 status line이라고 함

   HTTP headers = 요청을 지정하거나, 메시지에 포함된 본문을 설명

- 바디(body) 사용에 있어서 전송되는 데이터

 

 

 

요청(Requests)

 

클라이언트가 서버에 보내는 메시지

 

 

구조

  • Status line
  • Headers
  • Body

 

1) Start Line

 

의미 : 서버에서 요청을 받아들이는 첫 줄

 

 

method, URL, version으로 이루어짐

•  method

   => 수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명

 

•  URL

   => method에 의해 형태가 달라짐

 

   - origin 형식 (method => POST, GET, HEAD, OPTIONS)

     ?와 쿼리 문자열이 붙는 절대 경로 

 

   - absolute 형식 (method => 대부분 GET)

     완전한 URL 형식 -> 프록시에 연결하는 경우 

         예시) GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

 

   - authority 형식 (HTTP 터널을 구축하는 경우, CONNECT와 함께 사용)

     도메인 이름과 포트 번호로 이루어진 URL의 authority component 예시) CONNECT developer.mozilla.org:80 HTTP/1.1

 

   - asterisk 형식

 OPTIONS 와 함께 별표(*) 하나로 서버 전체를 표현

 

         예시)             

             OPTIONS * HTTP/1.1

 

 version

   => HTTP 버전은 메시지의 다른 구조를 결정, 이를 위해 HTTP 버전을 함께 입력

 

 

 

2) Header

 

의미 :

해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분

 

기본 구조를 따름

대소문자 구분 없는 문자열과 콜론(:), 값을 입력

값은 헤더에 따라 다름

 

 

총 3가지 부분으로 나뉨

 

 

Request headers :

User-Agent, Accept-Type, Accept-Language과 같은 헤더는 요청을 보다 구체화합니다.

Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있습니다.

 

General headers :

메시지 전체에 적용됩니다.

 

Entity headers :

Content-Length와 같은 헤더는 body에 적용됩니다. body가 비어있는 경우, entity headers는 전송되지 않습니다

 

 

3) Body

 

요청의 본문은 HTTP messages 구조의 마지막에 위치 (모든 요청에 body가 필요하지는 않다)

 

 

 

 

클라이언트가 서버에 보내는 메시지

 

 

구조

- Status line

- Headers

- Body


1) Start Line

 

의미 : 서버에서 요청을 받아들이는 첫 줄

 

 형식 => GET /search HTTP/1.1

 

method, URL, version으로 이루어짐

•  method

   => 수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명

 

•  URL

   => method에 의해 형태가 달라짐

 

   - origin 형식 (method => POST, GET, HEAD, OPTIONS)

     ?와 쿼리 문자열이 붙는 절대 경로 

         예시)

             POST / HTTP 1.1

             GET /background.png HTTP/1.0  

             HEAD /test.html?query=alibaba HTTP/1.1

             OPTIONS /anypage.html HTTP/1.0

 

     - absolute 형식 (method => 대부분 GET)

     완전한 URL 형식 -> 프록시에 연결하는 경우

예시)  GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

 

   - authority 형식 (HTTP 터널을 구축하는 경우, CONNECT와 함께 사용)

     도메인 이름과 포트 번호로 이루어진 URL의 authority component

      예시)   CONNECT developer.mozilla.org:80 HTTP/1.1

 

   - asterisk 형식

     OPTIONS 와 함께 별표(*) 하나로 서버 전체를 표현  예시) OPTIONS * HTTP/1.1

 

 version

   => HTTP 버전은 메시지의 다른 구조를 결정, 이를 위해 HTTP 버전을 함께 입력

 

 


 

 

2) Header

 

의미 : 해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분

 

기본 구조를 따름

대소문자 구분 없는 문자열과 콜론(:), 값을 입력

값은 헤더에 따라 다름

 

총 3가지 부분으로 나뉨

header의 구분

 

 

Request headers :

User-Agent, Accept-Type, Accept-Language과 같은 헤더는 요청을 보다 구체화합니다.

Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있습니다.

 

General headers :

메시지 전체에 적용됩니다.

 

Entity headers :

Content-Length와 같은 헤더는 body에 적용됩니다. body가 비어있는 경우, entity headers는 전송되지 않습니다

 


 

3) Body

 

요청의 본문은 HTTP messages 구조의 마지막에 위치 (모든 요청에 body가 필요하지는 않다)

 

 

응답(Responses)

 

요청메세지에 대한 서버의 답변

 

 

구조

- Headers

- Body

- Status line


1) Status Line

 

1. 현재 프로토콜의 버전(HTTP/1.1)

2. 상태 코드 - 요청의 결과를 나타냅니다. (200, 302, 404 등)

3. 상태 텍스트 - 상태 코드에 대한 설명

 

 형식 => HTTP/1.1 404 Not Found.

1) Header

 

Response의 headers와 동일

다만 response에서만 사용되는 header 값들이 있다.

예를 들어, User-Agent 대신에 Server 헤더가 사용된다.

 

Response headers :

Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공

 

General headers :

메시지 전체에 적용

 

Entity headers :

Content-Length와 같은 헤더는 body에 적용

body가 비어있는 경우, entity headers는 전송되지 않음


1) 본문 (Body)

 

응답의 본문은 HTTP messages 구조의 마지막에 위치 (모든 응답에 body가 필요하지는 않다)

 201, 204와 같은 상태 코드를 가지는 응답에는 본문이 필요하지 않다

 

응답의 body종류

 

Single-resource bodies(단일-리소스 본문) :

길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의

길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있음

파일은 chunk로 나뉘어 인코딩되어 있습니다.

 

Multiple-resource bodies(다중-리소스 본문) :

서로 다른 정보를 담고 있는 body있음

 

'서버 기본상식' 카테고리의 다른 글

① (경로)요청 메세지 보내기 by Postman  (0) 2021.09.11
res.json() vs express.res.json()  (0) 2021.09.10
크롬 에러 해결  (0) 2021.09.02
3) 도메인 , DNS  (0) 2021.09.02
2) IP와 포트  (0) 2021.09.02

댓글