HTTP/2: 자세히: 프로토콜 협상 편

4190 단어 http2

이 보도에 관하여


현재 HTTP/2의 상세한 내용을 개인적으로 총결하였다.내용은 HTTP/2에 대한 협의 협상을 시작하는 것이다.

HTTPS(h2) 및 HTTP(h2c)


HTTP/2에는 HTTP/1이 포함됩니다.x와 마찬가지로 TLS를 사용하는 HTTPS와 사용하지 않는 HTTP가 있습니다.
  • HTTPS (HTTP/2 over TLS)
  • TLS를 이용한 암호화 커뮤니케이션
  • 표지부호는 h2
  • HTTP (HTTP/2 over cleartext TCP)
  • TLS를 사용하지 않고 명문(Cleartext)을 통한 통신
  • 표지부호는 h2c
  • 일반 브라우저는 h2에만 대응하기 때문에 실질적으로 h2가 필요하다.또한 h2에서 사용되는 TLS에는 다음과 같은 요구 사항이 있습니다.
  • TLS 버전 1.2 이상
  • SNI 확장 필요
  • 클라이언트는 TLS 협상 시 타겟 도메인 이름을 지정해야 합니다
  • .
  • TLS 1.2의 경우 암호화 키트에 다음 요구 사항이 있음

  • RFC 7540 블랙리스트에 설명된 암호화 키트를 사용할 수 없음
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA 256
  • 필요

    HTTP/2 통신 시작 전 프로세스


    고객은 먼저 통신자의 서버나 프록시 서버가 HTTP/2를 지원하는지 알아야 한다.상술한 방법은 h2와 h2c에서 다르기 때문에 다음과 같은 세 가지 유형으로 나눌 수 있다.
  • h2c에서 통신 상대방이 HTTP/2를 지원하는지 사전에 알지 못한 경우
  • h2c에서 통신 상대방이 HTTP/2에 대응하는 것을 미리 알고 있는 경우
  • h2의 경우
  • 먼저 HTTP/1.1을 사용하는 메커니즘의 h2c에서 설명합니다.

    h2c: HTTP/2 지원 여부, 사전에 알 수 없는 경우


    고객이 사전에 통신 상대방이 HTTP/2에 대응하는지 알 수 없을 때 클라이언트는 HTTP/1.1의 Upgrade 기구를 사용한다.Upgrade와 연결된 연결에서 HTTP/1.1에서 다른 프로토콜의 구조로 변경됩니다. 예를 들어 웹소켓을 사용할 수도 있습니다.
    HTTP/2에 Upgrade를 실행하려면 클라이언트가 다음 헤더를 보내야 합니다.
  • Upgrade 제목에 지정h2c
  • HTTP2-Settings 제목 포함
  • Connection 제목HTTP2-Settings※ Upgrade 의도는 다음 홉에만 적용되기 때문에 프록시 서버 등을 통해 머리를 전송하고 싶지 않습니다.
  • 예를 들어 이렇게 된 요청.
    GET / HTTP/1.1
    Host: server.example.com
    Connection: Upgrade, HTTP2-Settings
    Upgrade: h2c
    HTTP2-Settings: <SETTINGS フレームのペイロードを base64url エンコードした文字列>
    
    Upgrade의 HTTP/2에 대응하는 서버가 101(Switching Protocos)의 응답을 반환합니다.그런 다음 HTTP/2 프레임을 전송할 수 있습니다.
    HTTP/1.1 101 Switching Protocols
    Connection: Upgrade
    Upgrade: h2c
    
    HTTP/2에 대응하지 않는 서버는 Upgrade 제목이 없으면 HTTP/1.1로 응답을 되돌려줍니다.
    HTTP/1.1 200 OK
    Content-Length: 243
    Content-Type: text/html
    
    Upgrade 인스턴스를 참조로 첨부합니다.

    h2c: 대응하는 HTTP/2의 상황을 미리 알다


    클라이언트가 목적지 서버가 HTTP/2를 지원한다는 사실을 알게 되면 클라이언트는 사전 지식(Proor Knowledge)을 갖게 됩니다.
    이런 상황에서 클라이언트가 서버에 TCP 연결을 구축할 때 연결 예인터페이스라고 불리는 마술 글자를 보내고 HTTP/2의 프레임 수발을 시작한다.
    연결 인터페이스는 PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n의 문자열입니다.다음은 연결을 구축한 후 연결 인터페이스를 보내는 실례를 추가합니다.

    또한curl 명령에는 --http2-prior-knowledge의 옵션이 있는데 이것은 이 모드를 가리킨다.

    h2


    H2의 경우 TLS로 확장된 ALPN(Application Layer Protocol Negotiation)을 사용하여 HTTP를 사용할 버전을 결정합니다.
    ALPN은 TLS의 확장이다. 이 TLS는 TLS 악수 과정에서 응용 단계에서 사용하는 협의를 협상하고 h2처의 협의 협상을 위해 추가된다(단 어떠한 협의에서도 사용할 수 있다).
    구체적으로 다음과 같이 판본을 확정한다.
  • 클라이언트는 해당 HTTP 버전의 목록을 TLS의 Client Hello에 포함시켜 발송
  • 서버 버전을 선택하여 TLS의 Server Hello에 포함
  • 다음은 Client Hello 및 ServerHello의 인스턴스입니다.
    [고객이 Client Hello의 ALPN을 통해 h2와 http/1.1을 제시하는 곳]

    [서버는 ServerHello의 ALPN 확장을 통해 선택한 h2를 되돌려주는 곳]

    참고로 RFC 7301에서 ALPN이 TLS에 추가된 경과 및 기타 프로토콜에서도 사용할 수 있습니다.
    Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension
    This document specifies a TLS extension that permits the application layer to negotiate protocol selection within the TLS handshake. This work was requested by the HTTPbis WG to address the negotiation of HTTP/2 ([HTTP2]) over TLS; however, ALPN facilitates negotiation of arbitrary application-layer protocols.

    좋은 웹페이지 즐겨찾기