중화사전망 - 자전 검색 - HTTP2 기능
HTTP2 기능
HTTPS 는 SSL/TLS 를 도입하여 보안 측면에서 "최고" 에 도달했지만 성능 향상에는 좋지 않습니다. 그것은 단지 핸드쉐이킹 암호화 과정을 최적화했을 뿐, 전체 데이터 전송에 대해 더 나은 개선 방안을 제시하지 않고,'? 연결 "이" 후진 "기술. 구글은 먼저 SPDY 프로토콜을 발명해 자신의 브라우저 Chrome 에 적용해 HTTP 성능 최적화를 위한' 첫 번째 총' 을 선보였다. 이후 인터넷 표준화기구인 IETF 는 SPDY 를 기반으로 다른 당사자들의 사상을 통합했다. 마침내 HTTP/ 1 의 후임자를 발표했습니다. 바로 오늘의 주인입니까? "HTTP/2" 성능이 높습니까? 점프。
HTTPS 는 보안 면에서 매우 뛰어나기 때문에 HTTP/2 의 유일한 목표는 성능 향상입니다. 하지만 많은 기대를 담고 있을 뿐만 아니라 HTTP/ 1 의 엄청난 역사적 부담까지 짊어지고 있기 때문에 프로토콜 수정은 신중해야 하며 호환성이 최우선 과제다. 그렇지 않으면 인터넷상의 수많은 기존 자산이 파괴될 수 있다. 기능 호환성을 유지해야 하기 때문에 HTTP/2 는 HTTP 를 의미와 구문의 두 부분으로 분해합니다. 의미 계층은 변경되지 않고 HTTP/ 1 (예: RFC723 1) 와 정확히 일치합니다. 예를 들어 요청 메서드, URI, 상태 코드, 제목 필드 등의 개념이 있습니다. 그대로 유지하여 재학습 비용을 절감할 수 있으며, HTTP 기반 상위 계층 애플리케이션은 수정 없이 HTTP/2 로 원활하게 변환할 수 있습니다. 특히 https 와 달리 HTTP/2 는 URI 에 새 프로토콜 이름을 도입하지 않고 여전히 "HTTP" 를 사용하여 일반 텍스트 프로토콜을 나타내고 "httpS" 를 사용하여 암호화 프로토콜을 나타냅니다.
먼저 HTTP/2 는 메시지 헤더에 대해 "큰 작업" 을 수행합니다. HTTP/ 1 에서 헤더 필드 "컨텐트 인코딩" 을 사용하여 대역폭을 절약하기 위해 gzip 압축과 같은 본문 인코딩 방법을 지정할 수 있지만 메시지의 또 다른 구성 요소는 무엇입니까? 머리는 무시되어 최적화 방법이 없습니다.
메시지 헤더는 일반적으로 "사용자 에이전트", "쿠키", "수락", "서버" 와 같은 많은 고정 헤더 필드를 가지고 다니지만, 본문은 종종 수십 바이트 (예: GET 요청, 204/30/kloc) 밖에 안 됩니다 더욱이, 수천 개의 요청 응답 메시지에 중복되는 필드 값이 많아 낭비되고 있습니다. "꼬리 효과 응답" 은 이러한 고도로 중복 된 데이터가 많은 대역폭을 소비하므로 HTTP/2 는 성능 향상의 초점으로 "헤드 압축" 을 사용합니다. 물론 최적화 방법 또는 "압축" 을 생각할 수 있습니다.
그러나 HTTP/2 는 기존의 압축 알고리즘을 사용하지 않고 특별한 것을 개발했습니까? "H 팩" 알고리즘을 기반으로 클라이언트와 서버의 양쪽 끝에 "사전" 을 설정합니다. 중복 문자열은 인덱스 번호로 표시됩니다. 호프만 인코딩은 정수와 문자열을 압축하는 데도 사용되며 50 ~ 90% 의 높은 압축률을 달성할 수 있습니다.
HTTP/ 1 의 일반 텍스트 메시지에 익숙해졌을 것입니다. 그것의 장점은' 한눈에 알 수 있다' 는 것이다. 가장 간단한 도구로 디버깅을 시작하는 것이 매우 편리하다. 그러나 HTTP/2 는 이와 관련하여' 타협' 하지 않고, 육안이 아닌 10 여 년 동안 지속된 현상을 바꾸기로 했다. ASCII 코드, 하지만 기본 TCP/IP 프로토콜에 "근접", 이진 형식 사용. 이것은 비록 사람들에게 불친절하지만, 컴퓨터 분석을 크게 용이하게 한다. 일반 텍스트를 사용할 때 대/소문자, 공백 문자, back 과 같은 모호함이 발생하기 쉽습니다. 줄바꿈, 여러 글자, 몇 글자 등. , 프로그램은 처리 시 반드시 복잡한 상태 기계를 사용해야 하며, 비효율적이고 번거롭다.
TCP 프로토콜의 일부 기능을 애플리케이션 계층으로 이동하고, "헤드+바디" 의 원본 메시지를 여러 개의 작은 블록의 이진 "프레임" 으로 분해하고, "헤드" 프레임으로 헤더 데이터를 저장하고, "데이터" 프레임은 엔티티 데이터를 저장합니다. 이 방법은 "블록" 블록 인코딩과 약간 비슷합니다. 마찬가지로' 0 화' 라는 생각이지만 HTTP/2 데이터가 프레임으로 구성되면' 헤드+바디' 의 메시지 구조가 완전히 사라지고 프로토콜은 하나의' 조각' 만 보입니다.
메시지의' 조각' 이 목적지에 도착한 후 어떻게 조립해야 합니까? HTTP/2 는 이에 대한 "스트림" 개념을 정의합니다. 이 개념은 이진 프레임의 양방향 전송 시퀀스이며 동일한 메시지의 프레임에는 고유한 스트림 ID 가 지정됩니다. HTTP/ 1 에서 요청 메시지와 응답 메시지가 되기 위해 조립된 일련의 데이터 프레임을 흐르는 가상 "데이터 흐름" 이라고 생각할 수 있습니다.
"스트림" 은 가상이지만 실제로는 존재하지 않기 때문에 HTTP/2 는 "스트림" 을 사용하여 한 TCP 연결에서 여러 "조각" 메시지, 즉 "재사용" 을 동시에 보낼 수 있습니다. 하나의 연결을 멀티플렉싱하여 여러 왕복 통신을 처리합니다. "흐름" 수준에서 메시지는 질서 정연한 "프레임" 시퀀스이고, "연결" 수준에서는 메시지가 무질서하게 전송되고 수신되는 "프레임" 입니다. 여러 요청/응답 간에 순차적 관계가 없으며 대기 시간이 필요하지 않으므로 "대기열 헤더 차단" 문제가 더 이상 발생하지 않으며 대기 시간이 줄어들고 접속 활용도가 크게 향상됩니다.
연결을 더 잘 활용하고 처리량을 높이기 위해 HTTP/2 는 TCP 프로토콜과 매우 유사한 우선 순위 및 흐름 제어를 위해 가상 "흐름" 을 관리하는 제어 프레임을 추가합니다.
HTTP/2 도 기존의 "요청-응답" 작업 패턴을 어느 정도 변경했습니다. 서버는 요청에 완전히 수동적으로 응답하는 대신 적극적으로 클라이언트에 메시지를 보내는 새로운 "스트림" 을 만들 수도 있습니다. 예를 들어 브라우저가 HTML 을 처음 요청할 때 사용 가능한 JS 및 CSS 문서를 미리 클라이언트에 보내 대기 지연을 줄입니다. 이를 "서버 푸시" (캐시 푸시라고도 함) 라고 합니다.
호환성을 위해 HTTP/2 는 HTTP/ 1 의' 일반 텍스트' 기능을 이어갔다. 이전과 같이 암호화된 통신을 강제하지 않고 일반 텍스트로 데이터를 전송할 수 있지만 형식은 여전히 이진이지만 암호 해독은 필요하지 않습니다. 그러나 HTTPS 는 대세의 흐름이기 때문에 크롬, Firefox 등 주류 브라우저는 모두 암호화 HTTP/2 만 지원한다고 공식 발표했기 때문에' 사실' 의 HTTP/2 는 암호화됐다. 즉, 인터넷에는 보통 무엇이 있나요? 모든 HTTP/2 는' https' 프로토콜 이름을 사용하여 TLS 에서 실행됩니다. 암호화와 일반 텍스트 버전을 구별하기 위해 HTTP/2 프로토콜은 암호화된 HTTP/2 를 나타내는 "H2", 일반 텍스트의 HTTP/2 를 나타내는 "h2c", "일반 텍스트" 를 나타내는 "C" 라는 두 개의 문자열 식별자를 정의합니다.
HTTP/2 표준 (20 15) 을 제정할 때 SSL/TLS 의 많은 약점이 발견되었지만 새로운 TLS 1.3 은 아직 발표되지 않았기 때문에 암호화된 HTTP/2 는 보안 방면에 있다 예를 들어 DES, RC4, CBC, SHA- 1 은 HTTP/2 에서 사용할 수 없습니다. 맨 아래에 "TLS 1.25" 를 사용하는 것과 같습니다.