HTTP는 Hyper Text Transfer Protocol의 약자로 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜(약속)이다.
TCP/IP (Transmission Control Protocol / Internet Protocol)을 이용하며 사용 포트 번호는 기본적으로 80이다. HTTP 서버가 80번 포트에서 요청을 기다리고 클라이언트는 80번 포트로 요청을 보내는 것이다.
HTTP는 애플리케이션 계층 프로토콜이다. HTTP는 네트워크 통신의 핵심적인 세부 사항에 대해서 신경쓰지 않는다. 이러한 과정은 신뢰성 있고 대중적인 프로토콜인 TCP/IP 에게 맡긴다.
TCP/IP 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합을 말하며 TCP부분과 IP부분으로 나뉜다. TCP는 전송 조절 프로토콜이고 IP는 인터넷 프로토콜인데 TCP/IP를 따른다는 것은 IP 주소 체계에 따르고 IP 라우팅을 이용해 목적지에 도달하면 TCP의 특성으로 송신자와 수신자를 연결한다는 것을 말한다. 깊게 들어가면 더 많은 내용이 있지만 이 글에선 HTTP를 이해하는데 도움되는 수준만 언급하겠다.
클라이언트와 서버 모두 HTTP를 이용해 통신 하므로 웹 개발자라면 백엔드, 프론트엔드 나뉠 것 없이 중요하다. 후에 나올 CORS, CORB와 같은 에러를 해결하는데도 HTTP 지식이 활용된다.
HTTP 메세지는 서버와 클라이언트 간에 데이터가 교환되는 방식이다. 메시지 타입은 클라이언트가 서버에 보내는 요청, 서버가 클라이언트에 보내는 응답의 두가지 형태가 있다.
HTTP 메시지 크게 세부분으로 구성된다.
모든 HTTP 메시지는 시작줄로 시작한다.
요청의 경우는 HTTP 메서드, 요청 URI, HTTP 버전
응답의 경우 HTTP 버전, 상태코드, 사유구절의 형태로 나타난다.
// 요청 예
GET /specials/saw-blade.gif HTTP/1.1
// 응답 예
HTTP/1.0 200 OK
HTTP 메서드 : 클라이언트가 서버에 요구하는 것으로 GET, HEAD, POST 등 한 단어로 구성된다.
요청 URI : 해당 요청이 전송되는 목표 URI를 나타낸다.
HTTP 버전 : HTTP 버전을 나타낸다. 현재는 1.1버전이고 2.0 버전을 개발중에 있다.
상태 코드 : 성공과 실패의 여부를 나태내는 코드이다.
사유 구절 : 숫자로 된 상태코드를 설명해주는 짧은 문구이다.
크게 공통 헤더(General Headers), 요청 헤더(Request Headers), 응답 헤더(Responce Headers), 엔티티 헤더(Entity Headers)로 나뉜다.
아래는 개발자 도구 네크워크 탭을 캡쳐한 것이다. 공통, 요청, 응답 헤더에 관한 정보를 확인할 수 있다. 엔티티 헤더는 요청, 응답 헤더 안에 속한 것으로 보인다.
공통 헤더(General Headers)
공통 헤더는 요청과 응답에 있어 공통적인 헤더 정보를 보여준다. 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더이다.
1-1. 주요 항목
2-1. 주요 항목
3-1. 상태 코드 (Status Code)
상태코드는 많은 종류가 있으며, 세 자리 숫자이고 크게 다섯 부류로 나눌 수 있다.
3-2. 주요 항목
Headers에서 한칸 띄고 명시되며 주로 응답 메시지에 있다.
응답 메시지에 담긴 내용이 브라우저 화면에 띄워진다.