HTTP

  • 웹에서 클라이언트와 서버간 통신을 위한 프로토콜
  • 애플리케이션 계층에 속하는 프로토콜
  • 신뢰성 있는 프로토콜이면 어떤 것이든 사용 가능. 주로 TCP 사용

1. HTTP 0.9

[request]
GET /mypage.html

[response]
<HTML>
  Sample Page
</HTML>
  • METHOD 는 GET 만 지원
  • 응답으로 HTML 만 받을 수 있음

2. HTTP 1.0

[request]
GET /mypage.html HTTP/1.0

[response]
200 OK
Content-Type : text/html
<HTML>
  Sample Page
</HTML>

  • Header 와 Status 가 추가됨
  • 다양한 형식 응답 가능
  • 연결 한 번에 요청 한 개와 응답 한 개만 처리
  • 매 요청마다 연결을 해야 한다.
  • 먼저 보낸 요청이 응답을 완료해야 다음 요청을 보낼 수 있음

3. HTTP 1.1

  • 연결 한 개당 한 개의 요청, 응답을 처리해 부하가 늘어나는 것을 막기 위해 Timeout 동안 커넥션을 닫지 않는 Persistent Connection 을 지원
  • 먼저 보낸 요청의 응답을 기다리지 않고 여러 요청을 순차적으로 보내고 그 순서에 맞춰 응답을 받는 pipelining 기법 추가
  • 순차적으로 보낸 여러 요청 중 한 요청이 오래 걸리면 다른 요청들도 블로킹 되는 Head of blocking 문제가 발생함
  • Header 구조가 중복되어 낭비가 발생한다

4. HTTP 2.0

출처 - https://velog.io/@taesunny/HTTP2HTTP-2.0-%EC%A0%95%EB%A6%AC
출처 - https://velog.io/@taesunny/HTTP2HTTP-2.0-%EC%A0%95%EB%A6%AC
출처 - https://velog.io/@taesunny/HTTP2HTTP-2.0-%EC%A0%95%EB%A6%AC
  • HTTP 메시지 전송 방식이 변화됨
  • 기존 텍스트 형식의 메시지를 Header Frame, Data Frame 으로 나누고 바이너리 인코딩 해 오류 발생을 줄이고 전송 속도를 높인다
  • 프레임 여러 개가 모여 메시지, 메시지 여러개가 모여 스트림이 된다
  • 각 프레임에는 프레임 헤더가 있는데 자신이 속한 스트림을 식별한다
  • 메시지가 프레임으로 쪼개졌기 때문에 메시지 간 순서가 사라짐
  • 메시지 멀티플렉싱이 되어 Head of blocking 문제 해결
  • 리소스간 전송 우선 순위를 설정해 먼저 응답 받을 수 있다
  • 스트림은 양방향이기 때문에 클라이언트가 요청하지 않아도 서버에서 먼저 보내는 Server Push 가 가능하다
  • 헤더 값을 저장하는 테이블을 활용해 중복되는 내용을 줄임. 이전 헤드 내용과 중복되는 필드를 재전송 하지 않고 테이블에서 조회해 사용한다.