[HTTP] HTTP 2.0

2021. 10. 17. 10:53

10. HTTP/2.0

  • HTTP 2.0 이란?
  • HTTP 2.0을 만들게 된 배경
  • HTTP/1.1과의 주요 차이점
  • 보안이슈

 

10.1 HTTP/2.0의 등장배경

  • HTTP/ 1.1 메시지 포맷은 단순성과 접근성이 주요 포인트
    • 성능이 어느정도 희생되었음
    • 요청을 보내고 응답을 보내는게 1:1 방식이기 때문에 회전 지연(latency) 발생 가능
  • 지금까지 이 회전지연을 줄이기 위한 방안을 시도해옴
    • ex) 구글의 SPDY
  • SPDY를 기반으로 HTTP/2.0 프로토콜이 설계 됨

 

10.2 개요

  • HTTP/2.0은 서버와 클라이언트 사이의 TCP 커넥션 위에서 동작
  • HTTP/2.0 요청과 응답은 길이가 정의된 한개 이상의 프레임에 담김
    • 헤더는 압축됨
  • 프레임들에 담긴 요청과 응답은 스트림을 통해 전송
    • 한개의 스트림이 한쌍의 요청과 응답 처리
    • 하나의 커넥션 위에 여러 개의 스트림이 동시에 만들어 질 수 있음
    • HTTP/2.0은 이들 스트림에 대한 흐름 제어와 우선순위 부여 기능 제공
  • 서버 푸시 도입
    • 서버는 클라이언트에게 필요하다고 생각하는 리소스면 요청 안받아도 전송 가능
    • 즉, 요청을 안받아도 서버가 데이터 전송 가능

 

10.3 HTTP/1.1과의 차이점

10.3.1 프레임

  • HTTP/2.0에서 모든 메시지는 프레임에 담김

![프레임](https://media.vlpt.us/images/taesunny/post/eddc9c22-7d46-4899-877c-f8ce751609d5/image.png)

10.3.2 스트림과 멀티 플렉싱

  • 스트림
    • HTTP/2.0 커넥션을 통해 클라이언트와 서버 사이에서 교환되는 프레임들의 독립된 양방향 시퀀스
  • 한 쌍의 HTTP 요청에서 요청-응답이 끝나면 스트림이 닫힘
  • HTTP/1.1에서는 요청 마다 TCP 연결이 필요한데 2.0에서는 하나의 커넥션에서 여러개의 스트림 생성이 가능하다.
    • 즉 하나의 커넥션으로 여러개의 요청을 보낼 수 있게 되어졌다.

10.3.3 헤더 압축

  • 위의 사진에서 볼수 있듯 헤더를 압축하여 보낼 수 있음
  • 요새는 헤더 크기가 회전 지연과 대역폭 양쪽 모두에 실질적인 영향을 미친다.
    • 그래서 2.0에서 압축을 한뒤 헤더 블록 조각을 쪼개어 전송함
    • 받는 쪽에서는 이 조각들은 이은 뒤 압축을 풀어 원래의 헤더로 사용함

10.3.4 서버 푸시

  • HTTP/2.0은 서버가 하나의 요청에 대해 응답으로 여러 개의 리소스를 보낼 수 있음
    • 이 기능으로 서버가 클라이언트가 어떤 데이터가 필요할 것인지 미리 알 수 있음
    • 예를 들어 HTML 요청이 들어오면 링크되어 있는 이미지, CSS, JS 파일을 푸시 가능
  • 주의점
    • 서버는 오직 안전하고, 캐시 가능하고, 본문을 포함하지 않은 요청에 대해서만 푸시를 할 수 있다.

 

 

10.4 알려진 보안 이슈

10.4.1 중개자 캡슐화 공격 (Intermediary Encapsulation Attacks)

  • HTTP/2.0 메시지를 HTTP/1.1로 변환하는 과정에서 의미가 변질 될 수 있음
    • 헤더값이 바이너리라서 변경 가능

10.4.2 긴 커넥션 유지로 인한 개인정보 누출 유려

  • 커넥션이 유지되면 정보 유출이 쉬워짐

 

 

ref : HTTP 완벽 가이드

https://developers.google.com/web/fundamentals/performance/http2?hl=ko#%EC%9A%94%EC%B2%AD_%EB%B0%8F_%EC%9D%91%EB%8B%B5_%EB%8B%A4%EC%A4%91%ED%99%94

'CS > 네트워크' 카테고리의 다른 글

[HTTP] 기본 인증  (0) 2021.10.19
[HTTP] 클라이언트 식별과 쿠키  (0) 2021.10.18
[HTTP] 캐시  (0) 2021.10.06
[HTTP] 프록시  (0) 2021.09.28
[HTTP] 웹 서버  (0) 2021.09.25

+ Recent posts