텍스트 기반의 통신 규약으로 웹에서 HTML, JSON등의 정보를 주고받는 프로토콜, 쉽게 말해 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
이 규약에 맞춰 Client
에서 서버로 요청(request)을 보내면 Server
는 응답(response)을 보내는 통신을 할 수 있다.
사용자(Client)가 브라우저를 통해 주소(URL, URI)를 통해 요청(request)을 하면 서버에서는 요청사항에 맞춰 응답(response)하는 형태로 동작하게 된다.
⭐️ HTML 만이 HTTP 통신을 위한 유일한 문서는 아니며 사용자에 요청에 맞춰 JSON, XML과 같은 형태의 정보를 주고 받을 수 있다.
출처 : MDN
요청(request)와 응답(response)는 비슷한 구조를 가진다.
HTTP 요청은 클라이언트가 서버에 보내는 메세지로 start line에는 세가지 요소가 있다.
1. 수행할 작업(GET, PUT, POST등)이나 방식(HEAD 또는 OPTIONS)을 설명하는 HTTP method
2. 요청대상 또는 프로토콜
, 포트
, 도메인
의 절대 경로는 요청 컨텍스트에 작성되며 HTTP method 마다 다르다.
3. HTTP 버전은 메세지의 다른 구조를 결정하므로 버전을 함께 입력
출처 : MDN
요청에 들어가는 HTTP header는 헤더의 기본 구조를 따르며, 대소문자 구분없는 문자열 다음에 콜론(:)
이 붙고, 뒤에 오는 값은 헤더에 따라 달라진다.
User-Agent
, Accept-type
, Accept-Language
같은 헤더는 요청을 구체화하며 Referer
처럼 컨텍스트를 제공하거나 If-None
과 같이 조건에 따라 제약을 추가할 수있음HTTP 구조의 마지막에 위치하며, 꼭 모든 요청에 body가 필요한 건 아니다. (GET
,HEAD
,DELETE
,OPTIONS
처럼 서버에 리소스를 요청하는 경우)
POST
,PUT
과 같은 일부 요청은 데이터를 업데이트하기 위해 사용하며 두가지 종류로 나눌 수 있다.
응답의 첫줄은 status line으로 부르며 아래의 정보를 포함한다.
1. 현재의 프로토콜 버전
2. 상태코드(요청의 결과를 나타냄)
3. 상태 텍스트(상태코드에 대한설명)
출처 : MDN
응답에 들어가는 HTTP header는 요청헤더와 동일한 구조를 가지고 있다.
1. General headers : 메세지 전체에 적용됨
2. Response headers : Vary
,Accept-Ranges
와 같이 상태 줄에 넣기에 부족했던 추가정보
3. Entity headers : Content-length와 같은 헤더는 body에 적용되며 body가 비어있는 경우 전송 되지 않음
HTTP 구조의 마지막에 위치하며, 꼭 모든요청에 body가 필요한 건 아니다. (201, 204와 같은 상태코드)
코딩을 배우기전 다니던 회사에서 RS-485통신 이더넷 통신등 많이 해봤던게 이번 HTTP를 배울때 많이 도움이 되었던거같다. 다만 모든 통신을 해보고싶지는 않다..... 지금 공부하는 걸로도 충분히 차고넘친다..
이제 Rest API를 배울텐데 막막하다🤪