HTTP(Hypertext Transfer Protocol)
- 클라이언트와 서버 간 통신을 위한 프로토콜
기본 HTTP/0.9는 Get method만 있으며 HTML 리소스만 처리 가능했지만 1.0으로 와선 css, image등 여러 파일을 보내고 받을 수 있도록 설계 되었다.(Post method추가)
통신시에 매번 새로운 연결을 해야함
하나의 IP에 여러 개의 도메인을 운영할 수 없음
기본적으로 Connection 당 하나의 요청을 처리
HTTP의 공식 표준 버전으로써 GET, POST 외에도 PUT, DELETE가 생겼으며, 하나의 TCP 연결을 재사용하여 많은 컨텐츠를 전달할 수있는 지속적 연결 기술이 추가 되었다.
브라우저가 웹 서버에 여러 개의 컨텐츠를 요청했을 때 이전 요청에 대한 응답을 완전하게 받지 않더라도 지속적으로 연결로 확보한 하나의 TCP 연결 내에서 미리 다음 요청에 대한 처리를 시작하면서 전체적인 전달 시간을 줄이는 방식
short-lived connection은 HTTP/1.0, 오른쪽 두개는 HTTP/1.1에 해당
지정한 시간동안 connection을 닫지않으며 여러 요청에 재사용함으로써, 새로운 TCP 핸드셰이크를 하는 비용을 아끼고, 성능 향상에 기여
영속적인 커넥션도 단점이 있는데 실제 데이터를 보내지 않는 상황에서도 통신을 열어서 유지해야 하기 때문에 서버 리소스를 낭비하게 된다.
HTTP/1.1은 커넥션 하나를 통해 요청 하나를 보내고 그에 대해 응답 하나만을 받는 HTTP의 메시지 교환 방식은 단순했지만, 응답을 받아야만 그다음 요청을 보낼 수 있기 때문에 latency를 피할 순 없었기에 더 효율적이고 빠른 HTTP가 필요로 했고 이러한 요구로 만들어진 것이 구굴의 SPDY 프로토콜이다.
HTTP/1.1에서는 헤더를 아무런 압축 없이 그대로 전송되어 웹페이지 하나를 방문할 때의 요청이 만히 않았기 때문에 헤더 크기가 문제가 되진 않았지만 요즘은 웹페이지를 하나 보기 위해서는 수십 수백의 요청을 보내기 때문에 실질적으로 영향을 끼친다. 이를 위해 헤더를 압축
헤더의 크기를 줄여 페이지 로드 시간을 감소시켰다.
HTTP/2는 클라이언트와 서버 사이에 가상 테이블을 만들어서 동일하고 중복되는 헤더 값들을 테이블에 저장하고 참고하는 방식으로 중복 전달을 제거
가상 테이블은 정적 테이블과 동적 테이블로 나뉜다.
HPACK을 사용해 허프만 알고리즘 방식으로 헤더를 압축
QUIC은 UDP를 채택해 TCP의 성능을 개선하려는 기술
전달 속도의 향상과 더불어 클라이언트와 서버의 연결 수를 최소화하고 대역폭을 예상해 패킷 혼잡을 피하는 것이 QUIC의 주요 특징
이전에 클라이언트가 한 번이라도 접속했던 서버라면, 별도의 정보 교환 없이 바로 데이터를 보내는 기술