너무 중요한 내용으로 강조가 많이 되었지만 이해가 잘 안되는 것 같다. 공식문서를 참고해서 한번 정리해보려고 한다. 🧑🏻💻
HTTP는 HyperText Trasfer Protocol의 줄임말이다. 웹브라우저와 웹서버가 서로 HTML과 같은 데이터를 주고 받으며 소통하기 위해 디자인 되었다.
전통적인 클라이언트 - 서버 모델에서 클라이언트가 HTTP messages 양식에 맞춰 요청을 보내면, 서버도 HTTP messages 양식에 맞춰 응답한다. 중요한 개념으로 HTTP는 특정 상태를 유지하지 않는다.
HTTP의 중요한 특징: Stateless 무상태성
HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식이다.
메시지의 타입은 두가지다.
요청(request)은 클라이언트가 서버로 특정 액션에 대해 말그대로 요청하는 것이고, 응답(response)는 클라이언트의 요청에 대한 서버의 응답이다.
HTTP의 요청(request)와 응답(response)의 구조는 서로 비슷하게 생겼다.
출처:MDN
Start-line의 내용에는 어떠한 요청을 하는지와 HTTP의 버전, 서버에선 요청에 대한 응답이 실패인지 성공인지의 여부 등이 나온다.
옵션으로 HTTP headers에는 요청 및 응답에 대한 부가적인 설명이 들어있다.
그리고 헤더와 바디 부분을 구분하는 공백줄(empty-line)이 존재하고
하단에 보내는 요청 및 응답에 대한 바디가 표시되고 여기에 Payload가 존재하게 된다.
은 말그래도 서버에게 보내는 요청이다. 요청을 보냄으로써 서버가 특정 동작을 취하게끔 만들기 위한 클라이언트의 메시지이다. 요청에는 start-line, header, body 로 구성되어 있다.
요청의 시작줄은 3가지의 요소로 이루어져 있다.
1. HTTP 메소드 - GET, POST, PUT, HEAD, OPTIONS 등등... 요청을 받은 서버가 어떠한 동작을 해야하는지에 대한 메서드로 시작된다.
2. 요청 타겟이 두번째로 전달된다. 주로 URL, 프로토콜, 포트, 도메인이
전달되고 요청타겟의 포맷은 HTTP 메소드에 따라 달라진다.
3. 마지막으로 HTTP 버전이 전달된다.
응답 메시지에 써야 할 HTTP 버전을 알려주는 역할이다.
요청에 들어가는 헤더는 기본 구조를 따른다. 문자열에 :
이 붙고 그 뒤에 값은 헤더에 따라 달라진다.
출처: MDN
본문은 요청의 마지막 부분에 전달되는데 POST
와 같은 서버에 특정 데이터를 전달하여야하는 경우 외에는 보통 본문은 필요가 없다.
서버의 응답에도 요청과 비슷하게 3가지의 요소가 전달되는데 status-line, header, body 로 전달된다.
상태줄이라고 불리며 상태줄의 응답의 순서로는
1. 프로토콜 버전 : 보통 HTTP 1.1
2. 상태코드 : 요청의 성공여부를 나타낸다. 200
, 404
, 302
등등
3. 상태 텍스트 : OK
, Not Found.
등 받는 요청에 대한 응답이 성공했는지 실패했는지 짧고 간결하게 전달하여 쉽게 이해할 수 있게 전달된다.
응답에 들어가는 헤더도 다른 헤더와 동일한 구조를 따른다.
출처: MDN
응답의 본문은 요청과 같이 마지막 부분에 포함되고 모든 응답에 본문이 들어가지 않는다. 보통 POST
요청 등에 따른 201
, 204
와 같은 상태코드를 가진 응답에는 본문이 포함되지 않는다.