Hyper Text Transfer Protocol 의 줄임말이다.
HTTP는 서버와 클라이언트가 서로 데이터를 주고받기 위해 사용되는 통신 규약을 말한다.
다음과 같은 여러 종류의 데이터들을 폭 넓게 전송할 수 있다.
서버간에 데이터를 주고 받을 때 대부분 HTTP 프로토콜을 사용해서 통신한다.
예를들어 http://www,google.com 과 같이 시작하면 www.google.com 인터넷 주소가 가진 데이터 정보 등의 교환을 HTPP의 통신 규약대로 처리하라는 것을 의미한다.

1. 요청 헤더 : http 버전이 생김
2. 응답 헤더 : 상태코드와 content-type이 생겨 html 파일 외 다른 타입의 파일도 전송
3. 단기커넥션 : connection 하나당 1 요청, 1 응답만 처리 가능. 그래서 매번 새로운 연결로 성능 저하 및 서버 부하 비용 증가
1. Persistent connection : 지정한 timeout 동안 연속적인 요청 사이에 커넥션을 닫지 않음
2. Pipelining : 하나의 커넥션에서 응답을 기다리 않고 순차적인 요청을 연속적으로 보내 그 순서에 맞춰 응답을 받는 방식으로 지연 시간을 줄임. 하지만 Head Of Line Blocking과 같은 문제점이 많아 사장됨
3. 우리가 아는 대배분의 HTTP 기능이 1.1에 구현되었음. 2와 3에서는 성능 개선에 초점이 맞춰짐
1. 메시지 전송 방식의 변화 : 바이너리 프레이밍 계층 사용
2. 파싱, 전송속도 증가
3. 오류 발생 가능성 저하
4. 멀티 플렉싱
5. HPACK 압축 : 헤더 중복값 개선
1. UDP 기반의 QUIC 프로토콜 바탕을 제작
2. 기존 TCP의 고질적인 지연시간(RTT)를 해결

HTTP 통신은 클라이언트(Front-End) 와 서버로 나뉘어진 구조다.
클라이언트가 요청(Requset)하면 서버가 응답(Response) 하는 것이다.
예를들어 클라이언트가 HTTP 메세지를 만들어 보낸다. 서버에서 요청에 대한 응답이 올 때까지 기다린다.
그리고 서버는 요청에 대한 결과를 만들어서 응답한다.
상태 코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다.
100 ~ 500번대 3자리 숫자로 이루어져있다.

HTTP 메시지는 기본적으로 [시작라인 (start-line), 헤더(Header), 공백 라인 (Empty Line), 바디 (Message Body)]로 구성되어 있다.
참고로 공백 라인은 HTTP 메시지 값 구분을 하기 위한 라인이므로, 반드시 있어야 한다.
만약 보낼 메시지 바디가 없다면? 공백만 넣고 끝내면 된다.
하지만 HTTP 요청(Request)냐 응답(Response)냐에 따라 안의 내용물이 다르다.


1. 시작 라인
1. Version : 사용된 http 버전
2. Status Code : 클라이언트가 보낸 요청이 성공인지 실패인지 숫자 코드로 표현
3. Status Message : Statuse Code에 대한 결과를 사람이 이해할 수 있는 글로 표현
2. 헤더
1. Headers : HTTP 전송에 필요한 모든 부가 정보 (메시지 크기, 압축 여부, 인증, 브라우저 정보, 서버 정보, 캐시 ... 등)
3. 공백 라인 : 헤더와 바디를 구분하기 위한 라인
4. 바디
1. Message Body : 전송 받은 데이터
HTTP 프로토콜에서 시작 라인 다음에는 헤더가 위치한다. 시작 라인의 끝과 헤더의 시작은 공백 없이 연결된다.
그리고 시작 라인은 무조건 한 줄로 정해져있기 때문에 시작 라인과 헤더 사이에는 공백이 필요 없다.
하지만 헤더와 바디는 정해진 줄의 수가 없다. 그리고 헤더는 요청,응답과 관련된 메타데이터를 포함하고, 바디는 실제 데이터를 포함하기에 구분될 필요가 있다. 수신 측에서는 공백을 통해 어디에서 바디 데이터가 시작하는지 정확하게 알 수 있다. 또한 헤더와 바디가 구분되면 수신측은 헤더를 먼저 읽고 그 후 공백 라인 이후 데이터를 바디로 처리한다.
이러한 구분은 HTTP 메시지의 해석을 단순화 시키고, 서버 및 클라이언트가 효과적으로 통신할 수 있도록 만들어준다.
우리가 평소에 사용하고 있는 인터넷도 파고 들면 기술들로 가득 차 있다.
이러한 내용을 알고 있냐 모르고 있냐에 따라 문제가 생겼을 때 대처하는 방법이 달라진다.
배움에는 끝이 없다.