What is HTTP?

김경식·2022년 1월 25일
1

자바스크립트

목록 보기
4/6
post-thumbnail

HTTP (HyperText Transfer Protocol)

텍스트 기반의 통신 규약으로 웹에서 HTML, JSON등의 정보를 주고받는 프로토콜, 쉽게 말해 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
이 규약에 맞춰 Client에서 서버로 요청(request)을 보내면 Server는 응답(response)을 보내는 통신을 할 수 있다.

HTTP 동작

사용자(Client)가 브라우저를 통해 주소(URL, URI)를 통해 요청(request)을 하면 서버에서는 요청사항에 맞춰 응답(response)하는 형태로 동작하게 된다.
⭐️ HTML 만이 HTTP 통신을 위한 유일한 문서는 아니며 사용자에 요청에 맞춰 JSON, XML과 같은 형태의 정보를 주고 받을 수 있다.

출처 : MDN

요청(request)와 응답(response)는 비슷한 구조를 가진다.

  • start line : start line에는 요청이나 응답의 상태를 나타내며 항상 첫번째 줄에 위치한다. (응답에서는 status line이라고 부름)
  • HTTP headers : 요청의 정보를 지정하거나, 메세지에 포함된 본문을 설명하는 헤더의 집합
  • empty line : 헤더와 본문을 구분하는 빈줄
  • body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함

(1) 요청(Request)

Start line

HTTP 요청은 클라이언트가 서버에 보내는 메세지로 start line에는 세가지 요소가 있다.
1. 수행할 작업(GET, PUT, POST등)이나 방식(HEAD 또는 OPTIONS)을 설명하는 HTTP method
2. 요청대상 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성되며 HTTP method 마다 다르다.
3. HTTP 버전은 메세지의 다른 구조를 결정하므로 버전을 함께 입력

Headers

출처 : MDN

요청에 들어가는 HTTP header는 헤더의 기본 구조를 따르며, 대소문자 구분없는 문자열 다음에 콜론(:)이 붙고, 뒤에 오는 값은 헤더에 따라 달라진다.

  1. General headers : 메세지 전체에 적용됨
  2. Request headers : User-Agent, Accept-type, Accept-Language 같은 헤더는 요청을 구체화하며 Referer 처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수있음
  3. Entity headers : Content-Length와 같은 헤더는 body에 적용되며 body가 비어있는 경우 전송되지 않음

Body

HTTP 구조의 마지막에 위치하며, 꼭 모든 요청에 body가 필요한 건 아니다. (GET,HEAD,DELETE,OPTIONS처럼 서버에 리소스를 요청하는 경우)
POST,PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용하며 두가지 종류로 나눌 수 있다.

  • Single-resource bodies(단일-리소스 본문) : 헤더 두개(Content-length, Contne-type)로 정의된 단일 파일로 구성
  • Multiple=resource bodies(다중-리소스 본문) : 각 파트마다 다른 정보로 구성

(2) 응답(Responses)

Status line

응답의 첫줄은 status line으로 부르며 아래의 정보를 포함한다.
1. 현재의 프로토콜 버전
2. 상태코드(요청의 결과를 나타냄)
3. 상태 텍스트(상태코드에 대한설명)

Headers

출처 : MDN

응답에 들어가는 HTTP header는 요청헤더와 동일한 구조를 가지고 있다.
1. General headers : 메세지 전체에 적용됨
2. Response headers : Vary,Accept-Ranges와 같이 상태 줄에 넣기에 부족했던 추가정보
3. Entity headers : Content-length와 같은 헤더는 body에 적용되며 body가 비어있는 경우 전송 되지 않음

Body

HTTP 구조의 마지막에 위치하며, 꼭 모든요청에 body가 필요한 건 아니다. (201, 204와 같은 상태코드)

  • Single-resource bodies(단일-리소스 본문) :
    길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의,
    길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있다.
  • Multiple-resource bodies(다중-리소스 본문) : 서로 다른 정보를 담고 있는 body

마치며

코딩을 배우기전 다니던 회사에서 RS-485통신 이더넷 통신등 많이 해봤던게 이번 HTTP를 배울때 많이 도움이 되었던거같다. 다만 모든 통신을 해보고싶지는 않다..... 지금 공부하는 걸로도 충분히 차고넘친다..
이제 Rest API를 배울텐데 막막하다🤪

0개의 댓글