HTTP는 Hyper Text Transfer Protocol의 약자로, W3 상에서 정보를 주고 받을 수 있는 프로토콜이다. 주로 TCP를 사용하고, HTTP/3부터는 UDP를 사용하며, 80번 포트를 사용한다.
클라이언트와 서버 사이에 이뤄지는 요청/응답 프로토콜이라 할 수 있다. 웹브라우저(클라이언트)가 HTTP를 통해 서버로부터 웹페이지나 그림 정보를 요청하면, 서버는 요청에 대한 응답 정보를 해당 사용자에게 전달한다.
HTTP를 통해 전달되는 데이터는 URL을 통해 조회할 수 있다.
HTTP 1.1의 느린 속도를 개선하기 위하여 SDPY 기반으로 등장
UDP를 사용한 HTTP이다. HTTP 3.0은 QUIC이라는 프로토콜 위애서 돌아가는데, QUIC은 UDP를 사용하는 프로토콜이다.
TCP의 특징을 생각해보면 전송을 보장하는 대신에 3-hand shake, 4-hand shake 처럼 오버헤드가 발생하여 속도가 느리다. 이로 인해 HOLB 등과 같은 문제를 피할 수 없다.
UDP는 best effort를 특징으로 하는 프로토콜로, 전송을 보장하지는 않지만 실시간 프로그램에 매우 적합한 프로토콜이다.
QUIC는 TCP hand shake 과정을 최적화하는 것에 초점을 맞추어 설계되었다. UDP는 Datagram 방식을 사용하는 프로토콜이기 때문에 각각의 패킷 간 순서가 존재하지 않는 독립적인 패킷이다. UDP는 TCP에 비해 헤더가 비어있기 때문에 커스터마이징할 수 있는 여지가 많고, 이를 이용하여 구현을 어떻게 하느냐에 따라 신뢰성을 확보할 수 있다.
즉, HTTP 3.0은 신뢰성을 확보한 UDP 방식이라고 생각할 수 있다.
TCP+TLS의 경우에는 데이터를 교환하기 전에 신뢰성 있는 연결과 암호화에 필요한 정보를 교환한 후에 데이터를 교환하게 된다.
TCP는 송신 측이 패킷을 보낸 이후에 타이머를 통해 패킷의 손상 여부를 확인한다. 이 과정에서 타임아웃을 동적으로 계산해야 하고, 패킷 재전송 시 ACK를 받았을 때 첫번째 전송에 대한 ACK인지, 두번째 전송에 대한 ACK인지 확인해야 한다. 이를 재전송 모호성이라 한다.
QUIC의 경우에는 헤더에 패킷 번호 공간을 부여하여 패킷 손실 감지에 걸리는 시간을 단축한다.
여러 개의 스트림을 사용하면 하나의 스트림의 패킷이 손실되어도 다른 스트림은 그대로 사용할 수 있다. HTTP 2.0과 마찬가지로 Muliplexing을 지원하여 이러한 이점을 가진다.
TCP의 경우에는 발신지의 IP, port와 수신지의 IP, port로 연결을 식별한다. 이로 인해 클라이언트의 IP가 바뀔 경우 연결을 끊어버리게 된다. 이 경우 3-hand shake를 통해 다시 연결해야 하기 때문에 지연이 발생한다.
QUIC의 경우에는 connection ID를 통해 연결을 생성하기 때문에 클라이언트의 IP가 바뀌어도 연결을 끊지 않는다.
요청을 받았고, 이를 계속 진행함을 의미
요청을 성공적으로 받았고, 인식/수용함을 의미
요청 완료를 위해 추가 작업 조치가 필요함을 의미
요청의 문법이 잘못되었거나 요청을 처리할 수 없음을 의미
서버가 유효안 요청에 대한 충족을 실패함을 의미
HTTPS는 Hyper Text Transfer Protocol over Secure Socket, HTTP over TLS, HTTP over SSL, HTTPS over Secure의 약자로, W3 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. 통신의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발한 넷스케이프 웹 프로토콜로, 전자 상거래에서 널리 쓰인다. (거래에는 보안이 필수적이기 때문)
소켓 통신에서 일반 텍스트를 이용하는 대신에 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 따라서 데이터의 적절한 보호를 보장한다. 기본 TCP/IP 포트는 443번이다.