Study

[HTTP 완벽 가이드] 10장 : HTTP/2.0

이웃비 2021. 1. 14. 13:56

1. 프레임

  • R : 예약된 2비트. 값의 의미가 정의되어 있지 않으며 0이 어야한다.
  • 길이 : 페이로드의 길이를 나타내는 14비트 무부호 정수. 프레임 헤더는 포함되지 않는다
  • 종류 : 프레임의 종류
  • 플래그 : 8비트 플래그. 프레임의 종류에 따라 값이 다르다
  • R : 예약된 1비트
  • 스트림 식별자 ; 31비트. 특별히 0은 커넥션 전체와 연관된 프레임을 의미한다

2. 스트림과 멀티플렉싱

  • 하나의 커넥션에 여러 개의 스트림이 동시에 열릴 수 있다
  • 우선순위도 가질 수 있다.
  • 31비트의 무부호정수로 된 고유한 식별자를 갖는다
  • 서버와 클라이언트는 스트림을 상대방과 협상 없이 일방적으로 만든다

3. 헤더 압축

  • 헤더는 HPACK명세에 정의된 헤더 압축 방법으로 압축한 뒤 '헤더 블록 조각'들로 쪼개져서 전송된다
  • 받는 쪽에서는 이 조각들을 이은 뒤 압축을 풀어 원래의 헤더 결합으로 복원한다

4. 서버 푸시

  • 서버가 하나의 요청에 대해 응답으로 여러 개의 리소스를 보낼 수 있도록 한다
  • 리소스를 푸시하려는 서버는 먼저 클라이언트에게 자원을 푸시할 것임을 PUSH_PROMISE 프레임을 보내어 미리 알려주어야 한다.
  • 클라이언트는 RST_STRAM프레임을 보내어 푸시를 거절 할 수 있다.
  • 서버 푸시를 끄고 싶다면 SETTINGS_ENABLE_PUSH를 0으로 설정한다

5. 보안 이슈

  1. 중개자 캡슐화 공격
    • HTTP/2.0 메시지를 중간의 프락시가 HTTP/1.1 메시지로 변환할 때 메시지의 의미가 변질될 가능성이 있다
  2. 긴 커넥션 유지로 인한 개인정보 누출 우려