반응형
HTTP 1.1 의 전형적인 문제들
- RTT 시간 증가 → http1.1의 하나의 커넥션당 하나의 요청을 처리하므로 tcp 3-way handshaking이 매번 커넥션 요청을 할때마다 일어남 이건 불필요한 RTT 시간을 증가시킴(syn를 보내고 syn ack를 받는 왕복 시간)
- Client-driven transmission → 클라이언트가 요청하지 않으면 서버는 클라이언트로 쪽으로 정보를 전달하지 못함
- Fat message headers → 헤더에는 수많은 메타 정보가 들어감. 매 요청 시마다 엄청난 양의 헤더를 전송해야하며 중복된 정보가 전송될 수도 있음
- Head of line blocking → 하나의 커넥션당 하나의 요청을 극복하기 위해 pipelining 기법을 도입해서 순차적으로 여러 개의 요청을 보낼 수 있도록 함. 그러나 요청을 순차적으로 처리하다보니 앞의 요청이 처리가 지연되면 뒤의 요청도 처리가 지연되게 되는 문제 발생
해결책으로 등장한게 이미지를 합쳐서 큰이미지를 만든다던지 domain sharing 방법 -> but 한계점이 존재
SPDY 등장
구글에서 웹페이지 전송 지연을 줄이고 웹 보안을 개선하는 목표로 개발한 비표준 포로토콜
특징
- TLS위에서만 동작(https로 작성된 웹사이트에서만 동작)
- http 헤더 압축 → HTTP 헤더에는 요청마다 반복되는 내용이 매우 많으므로 헤더 압축만으로도 충분한 성능 향상 효과를 얻을 수 있다 → 요청이 많아질수록 압축률은 더 커지고 효과적!
- 텍스트가 아닌 바이너리 프로토콜 → 프레임을 텍스트가 아닌 바이너리로 구성하므로 파싱하는 속도가 빠르고 오류 발생 가능성도 낮음
- multiplexing - > 하나의 커넥션 안에서 다수의 독립적인 스트림을 동시에 수행
- Full-duplex interleaving과 스트림 우선순위 → 한 스트림이 진행 중이더라도 다른 스트림이 끼어드는(interleaving) 것을 허용하고 스트림의 우선순위 설정도 지원
- Server Push → 서버에서 직접 푸시가 가능 ex) 클라이언트가 이미지 같은게 들어가있는 html 파일을 요청하면 이미지도 미리 같이보냄
SPDY는 http2의 참고규격이 되었고 특징들을 비교해보면 비슷한 특징들이 많음
HTTP 2의 특징
- multiplexed streams → 하나의 커넥션으로 동시에 여러 개의 메시지를 주고 받을 수 있고 응답은 순서에 상관없이 stream으로 주고 받게됨. http/1.1의 connection keep-alive, pipelining 개선시킴
- Stream Prioritization → 응답에 대한 우선순위를 정해 우선순위가 높을수록 응답을 빨리 하도록 함.
- server push → 서버가 클라이언트의 요청없이 응답을 보냄 위의 예시참고
- Header Compression → Header Table과 Huffman Encoding을 사용하는 HPACK 압축방식을 이용! 클라이언트와 서버는 각각 Header Table(static, dynamic 존재)을 관리하고 이전 요청과 동일한 부분은 table의 index만 찾아서 보내고 변경되는 값은 Huffman Encoding을 한 후 보냄 -> Header의 크기를 경량화
Huffman Encoding이란 앞서 보낸 정보와 달라진 정보만 다음 메시지에서 보내는 과거와 현재의 차이 기반 압축 기술
- Binary protocol -> 앞서 설명한 것처럼 바이너리로 인코딩한 후 스트림으로 보냄
스프링부트 환경에서 HTTP2 테스해보기
아래 명령을 intellij 명령어에서 입력!
그 다음 application.properties 파일에 다음과 같은 내용을 추가해줍니다! 비밀번호는 본인이 설정한 비밀 번호 넣어주면 되고 -alias는 저는 spring을 줬기 때문에 spring을 넣었습니다!
curl 은 url에 요청하는 명령어이며
-I : http header만 보여주는 옵션
-k: https 사이트를 SSL 검증 없이 연결
실제로 대표적인 사이트들의 사용 프로토콜
발표 자료로 준비하던 거라서 텍스트가 ㅎ,,ㅎ
자료 링크
https://web.dev/performance-http2/
https://velog.io/@dsunni/Spring-Boot-스프링부트-원리-내장-서버-HTTPS와-HTTP2-1vcfg132
반응형
'기타' 카테고리의 다른 글
CI / CD 에 대해서.. (0) | 2023.06.04 |
---|---|
QUIC HTTP/3 내용 정리 (0) | 2022.12.08 |
WebRTC 내용 정리 (0) | 2022.12.08 |
HTTP2 정리 내용 (0) | 2022.12.08 |
gRPC 공부 내용 정리 (0) | 2022.12.08 |