HTTP 란?
HTTP는 Hyper Text Transfer Protocol의 두문자어로, 인터넷에서 데이터를 주고 받을 수 있는 프로토콜 입니다. 프로토콜은 규칙이라고 생각하면 됩니다. 이렇게 규칙을 정해두었기 때문에, 모든 프로그램이 이 규칙에 맞춰 개발해서 서로 정보를 교환할 수 있게 된겁니다.
MDN 공식문서
HTTP는 HMTL 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트 - 서버 프로토콜이기도 합니다. 클리이언트 - 서버 프로토콜이란 (보통 웹브라우저인) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미합니다. 하나의 완전한 문서는 텍스트, 레이아웃 설명, 이미지, 비디오, 스크립트 등 불러온(fetched) 하위 문서들로 재구성 됩니다.

- 클라이언트(client)는 HTTP를 통해 데이터를 서버로 요청(Request)하는 요청자이며, 흔히 크롬, FireFox 같은 웹 브라우저가 그 역할을 한다. 응용 프로그램에서 Http 요청을 위해 사용하는 라이브러리가 그 역할을 한다.
- 서버(Server)는 클라이언트가 요청한 데이터를 제공하는 제공자이며 이미지, HTML 파일처럼 파일을 제공하는 서버, 요청 주소에 따라 다른 내용을 제공하는 API서버 등 다양하게 있다. HTTP 통신에는 서버가 제공하는 결과를 응답(Response)라고 한다.
HTTP 메시지 구조
HTTP Request 구조
HTTP Request 메시지는 크게 3부분으로 구성된다. RequestLine / Header / Body
- Request Line : GET/HTTP/1.1
- HTTP request의 첫 라인으로 이 부분도 3부분으로 구성되어 있다.
- HTTP Method : GET/POST/PUT/DELETE 해당 request가 의도한 action을 정의하는 부분
- Requst target(요청 URL): ex)/login
- HTTP 버전
- Header
- 해당 request에 대한 추가 정보를 담고 있는 부분
- key:Value 값으로 되어있다. ex)HOST:google.com

자주 사용되는 header 정보에는 다음이 있다.
- Host : 요청이 전송되는 target의 host url (ex. google.com)
- User-Agent : 요청을 보내는 클라이언트의 대한 정보
- Accept : 해당 요청을 받을 수 있는 응답(response) 타입
- Connection : 해당 요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지할 것인지 끊을지에 대해 지시하는 부분
- Content-Type : 해당 요청이 보내는 메시지 body 타입 ex) json을 보내면 applilcation/json
- Content-Length : 메세지 body 길이
- Body
- 해당 request의 실제 메세지/내용
- body가 없는 request도 많다. ex) GET Request들은 대부분 body가 없는 경우가 많다.

HTTP Response 구조
Response도 request와 마찬가지로 크게 3부분으로 구성되어 있다. Status(Response) Line / Header / Body
- Status(Response) Line : HTTP/1.1 404 Not Found
- Response의 상태를 간략하게 나타내주는 부분으로 3부분으로 구성되어 있다.
- HTTP 버전
- status code : 응답 상태를 나타내는 코드. 숫자로 되어 있는 코드. 404
- status text: 응답 상태를 간략하게 설명해주는 부분. Not Found
- Header
- Response의 header와 동일하다.
- 다만 response에서만 사용되는 header값들이 있다. ex User-Agent대신 Server헤더가 사용된다.
- Body
- Response의 body와 일반적으로 동일하다.
- Request와 마찬가지로 모든 response가 body가 있지는 않다. 데이터를 전송할 필요가 없을 경우 body가 비어있게 된다.
자주 쓰이는 HTTP Methods
GET
- 이름 그대로 어떠한 데이터를 서버로부터 받아(GET)올때 주로 사용하는 Method
- 데이터 생성/수정/삭제 없이 받아오기만 할때 사용됨
- 가장 간단하고 많이 사용되는 HTTP Method
- 언급한대로 주로 데이터를 받아올때 사용되기 때문에 request에 body를 안 보내는 경우가 많다.
POST
- 데이터를 생성/수정/삭제 할때 주로 사용되는 Method
- 데이터를 생성 및 수정 할때 많이 사용하기 때문에 대부분의 경우 request body가 포함되서 보내진다.
참고