HTTP(Hypertext Transfer Protocol)란 텍스트기반의 통신 규약으로,
인터넷에서 데이터를 주고 받을 수 있게 돕는 Protocol입니다.
HTTP에 맞춰 프로그램을 개발함으로써, 프로그램끼리 서로 통신할 수 있습니다.
HTTP의 배경에는 Tim Berners-Lee와 그의 팀이 만든 World Wide Web이 있습니다.
Tim Berners-Lee는 1989년 인터넷을 통한 하이퍼텍스트 시스템을 만들기 위해 제안합니다.
해당 시스템은 초기에 Mesh라고 불리었으며, 구현과정에서 World Wide Web으로 이름을 바꾸었습니다.
해당 시스템은 TCP/IP를 기반으로 하며, 크게 4가지 구성요소로 이루어져있습니다.
즉, HTTP는 HyperText 문서를 교환하기 위한 Protocol로 시작되었습니다.

(위 아저씨는 World Wide Web을 만드신 Tim Berners-Lee 출처)
Tim Berners-Lee의 포스트
World Wide Web의 공식적인 출발점으로 여겨집니다.
Client가 Server에 요청시, Server는 요청사항에 맞는 결과를 response합니다.
HTML뿐만이 아니라, JSON, XML 등의 정보를 주고받을 수 있습니다.

Client가 Server에 요청을 보내는 것을 Request라고 합니다.
이 때, 요청을 보내는 정보를 담을 메시지가 필요한데, 이를 HTTP 메시지라고 합니다.
반대로 Server가 응답할때의 정보를 담는 메시지도 HTTP 메시지라고 합니다.
HTTP 메시지는 시작줄, 헤더, 본문으로 이루어집니다.
아래 실제 Request HTTP 메시지를 보면서 좀 다 자세히 살펴보겠습니다.
GET https://www.zerocho.com HTTP/1.1 # 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... # 헤더
Upgrade-Insecure-Requests: 1
(본문 없음)
시작줄은 메서드와 주소, 버전으로 이루어져있습니다.
위 메시지에서는,
을 사용하고 있는것을 확인할 수 있습니다.
헤더에는 요청에 관한 정보를 담고있습니다.
헤더의 종류는 굉장히 많은 관계로 다른 글에서 따로 다루겠습니다.
Request의 HTTP 메시지를 살펴보았습니다.
이번에는 Request에 따라 Server가 Client에 보내는 Response HTTP 메시지를 확인해 보겠습니다.
HTTP/1.1 200 OK # 시작줄
Connection: keep-alive # 헤더
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;
<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title... # 본문
Request HTTP 메시지와 마찬가지로 시작줄, 헤더로 시작합니다.
하지만 이번에는 본문이 추가되어있습니다.
시작줄은 버전, 상태코드, 상태메시지로 이루어져있습니다.
위 메시지의 시작줄에서는,
를 사용하고 있는 것을 확인할 수 있습니다.
헤더에는 응답에 관한 정보를 담고있습니다.
본문에는 HTML이 담겨있습니다. 웹브라우저는 해당 HTML을 사용해 화면을 렌더링합니다.
참고
https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
https://velog.io/@wnstj1128/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EB%8C%80%EB%B9%84-Network
https://velog.io/@surim014/HTTP%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80