HTTP / 2에서 멀티플렉싱의 의미
누군가 HTTP / 2와 관련하여 멀티플렉싱과 작동 방식을 설명해 주시겠습니까?
간단히 말해서 멀티플렉싱을 사용하면 브라우저가 동일한 연결에서 한 번에 여러 요청을 시작하고 순서에 관계없이 요청을 다시받을 수 있습니다.
이제 훨씬 더 복잡한 대답에 대해 ...
웹 페이지를로드 할 때 HTML 페이지를 다운로드하면 CSS, JavaScript, 이미지로드 등이 필요하다는 것을 알 수 있습니다.
HTTP / 1.1에서는 HTTP / 1.1 연결에서 한 번에 하나만 다운로드 할 수 있습니다. 따라서 브라우저는 HTML을 다운로드 한 다음 CSS 파일을 요청합니다. 반환되면 JavaScript 파일을 요청합니다. 반환되면 첫 번째 이미지 파일을 요청합니다. 등등. HTTP / 1.1은 기본적으로 동기식입니다. 요청을 보내면 응답을받을 때까지 멈춰 있습니다. 이것은 브라우저가 요청을 실행하고 응답을 기다린 다음 다른 요청을 실행 한 다음 응답을 대기하기 때문에 브라우저가 그다지 많은 작업을 수행하지 않는다는 것을 의미합니다. 많은 JavaScript는 브라우저가 많은 처리를 수행해야하지만 이는 다운로드되는 JavaScript에 따라 다르므로 최소한 처음에는 HTTP / 1.1로 상속 된 지연으로 인해 문제가 발생합니다. 일반적으로 서버는
따라서 오늘날 웹의 주요 문제 중 하나는 브라우저와 서버간에 요청을 전송할 때 네트워크 대기 시간입니다. 수십 밀리 초 또는 수백 밀리 초에 불과할 수 있지만 그다지 보이지 않을 수도 있지만 더 해져서 종종 웹 브라우징의 가장 느린 부분입니다. 특히 웹 사이트가 점점 더 복잡해지고 추가 리소스 (가져 오는대로)와 인터넷 액세스가 필요하기 때문에 모바일을 통해 증가하고 있습니다 (광대역보다 지연 시간이 느림).
예를 들어 HTML이 자체적으로로드 된 후 웹 페이지를로드해야하는 10 개의 리소스가 있다고 가정 해 보겠습니다 (100 개 이상의 리소스가 일반적이기 때문에 오늘날의 표준에 따르면 매우 작은 사이트이지만 간단하게 유지하고 다음과 같이 진행합니다). 예). 그리고 각 요청이 인터넷을 통해 웹 서버로 이동하는 데 100ms가 걸리고 양쪽 끝의 처리 시간이 무시할 만하다고 가정 해 보겠습니다 (간단 함을 위해이 예에서는 0이라고합시다). 각 리소스를 전송하고 한 번에 하나씩 응답을 기다려야하므로 전체 사이트를 다운로드하는 데 10 * 100ms = 1,000ms 또는 1 초가 걸립니다.
이 문제를 해결하기 위해 브라우저는 일반적으로 웹 서버에 대한 여러 연결 (일반적으로 6 개)을 엽니 다. 이는 브라우저가 동시에 여러 요청을 실행할 수 있다는 것을 의미합니다. 이는 훨씬 더 좋지만 여러 연결을 설정하고 관리해야하는 복잡성을 감수해야합니다 (브라우저와 서버 모두에 영향을 미침). 이전 예를 계속하고 4 개의 연결이 있다고 가정하고, 단순성을 위해 모든 요청이 동일하다고 가정하겠습니다. 이 경우 요청을 4 개의 연결 모두로 분할 할 수 있으므로 2 개는 3 개의 리소스를 가져오고 2 개는 2 개의 리소스를 사용하여 완전히 10 개의 리소스를 얻습니다 (3 + 3 + 2 + 2 = 10). 이 경우 최악의 경우는 3 라운드 시간 또는 300ms = 0.3 초입니다. 이는 좋은 개선입니다. 그러나이 간단한 예에는 이러한 여러 연결을 설정하는 비용이 포함되어 있지 않습니다.
HTTP / 2를 사용하면 동일한 요청에 여러 요청을 보낼 수 있습니다.연결-따라서 위와 같이 여러 연결을 열 필요가 없습니다. 따라서 브라우저는 "이 CSS 파일 내놔. 자바 스크립트 파일 내놔. Gimme image1.jpg. Gimme image2.jpg ... Etc."라고 말할 수 있습니다. 하나의 단일 연결을 완전히 활용합니다. 이것은 무료 연결을 기다리는 요청의 전송을 지연시키지 않는 명백한 성능 이점이 있습니다. 이러한 모든 요청은 인터넷을 통해 (거의) 병렬로 서버로 전달됩니다. 서버는 각각에 응답 한 다음 돌아 오기 시작합니다. 사실 웹 서버가 어떤 순서로든 응답하고 다른 순서로 파일을 다시 보내거나 요청 된 각 파일을 조각으로 나누고 파일을 함께 섞을 수 있기 때문에 그보다 훨씬 더 강력합니다.헤드 오브 라인 차단 문제). 그런 다음 웹 브라우저는 모든 조각을 다시 모으는 작업을 수행합니다. 최상의 경우 (대역폭 제한이 없다고 가정-아래 참조) 10 개의 요청이 모두 동시에 거의 동시에 실행되고 서버에서 즉시 응답하면 기본적으로 1 회 왕복 또는 100ms 또는 0.1 초 10 개의 리소스를 모두 다운로드하십시오. 그리고 이것은 HTTP / 1.1에 대한 다중 연결의 단점이 없습니다! 이것은 또한 각 웹 사이트의 리소스가 증가함에 따라 훨씬 더 확장 가능합니다 (현재 브라우저는 HTTP / 1.1에서 최대 6 개의 병렬 연결을 열지 만 사이트가 더 복잡 해짐에 따라 증가해야합니까?).
이 다이어그램 은 차이점을 보여 주며 애니메이션 버전도 있습니다 .
참고 : HTTP / 1.1에는 여러 요청을 한 번에 보낼 수도 있는 파이프 라이닝 개념이 있습니다. 그러나 전체적으로 요청 된 순서대로 반환되어야했기 때문에 개념적으로 비슷하더라도 HTTP / 2만큼 좋은 곳은 없습니다. 이것은 브라우저와 서버 모두에서 너무 잘 지원되지 않아 거의 사용되지 않는다는 사실은 말할 것도 없습니다.
아래 주석에서 강조된 한 가지는 대역폭이 여기서 우리에게 미치는 영향입니다. 물론 인터넷 연결은 다운로드 할 수있는 양에 따라 제한되며 HTTP / 2는이를 해결하지 않습니다. 따라서 위의 예에서 논의 된 10 개의 리소스가 모두 방대한 인쇄 품질 이미지 인 경우에도 여전히 다운로드 속도가 느립니다. 그러나 대부분의 웹 브라우저에서 대역폭은 대기 시간보다 문제가 적습니다. 따라서 이러한 10 개의 리소스가 웹 사이트에서 매우 일반적으로 사용되는 것처럼 작은 항목 (특히 CSS 및 JavaScript와 같은 텍스트 리소스)이 웹 사이트에서 매우 일반적이라면 대역폭은 실제로 문제가되지 않습니다. HTTP / 2는 문제를 해결하려고합니다. 이것이 HTTP / 1.1에서 또 다른 해결 방법으로 연결이 사용되는 이유이기도합니다. 예를 들어 모든 CSS는 종종 하나의 파일로 결합됩니다.HTTP / 2에서의 안티 패턴 -완전히 제거하는 것에 반대하는 주장도 있지만).
실제 예를 들면 : 택배를 위해 상점에서 10 개의 품목을 주문해야한다고 가정합니다.
하나의 연결이있는 HTTP / 1.1은 한 번에 하나씩 주문해야하며 마지막 항목이 도착할 때까지 다음 항목을 주문할 수 없음을 의미합니다. 모든 것을 처리하는 데 몇 주가 걸릴 것이라는 것을 이해할 수 있습니다.
다중 연결이있는 HTTP / 1.1은 이동 중에 동시에 (제한된) 수의 독립 주문을 가질 수 있음을 의미합니다.
파이프 라이닝을 사용하는 HTTP / 1.1은 10 개의 항목을 기다리지 않고 차례로 요청할 수 있지만 요청한 특정 순서로 모두 도착한다는 것을 의미합니다. 그리고 한 항목의 재고가 없으면 나중에 주문한 항목을 받기 전에 기다려야합니다. 나중에 해당 항목이 실제로 재고가 있더라도! 이것은 조금 더 좋지만 여전히 지연 될 수 있으며 어쨌든 대부분의 상점이 이러한 주문 방법을 지원하지 않는다고 가정 해 봅시다.
HTTP / 2는 지연없이 특정 순서로 항목을 주문할 수 있음을 의미합니다 (위와 유사). 상점은 준비된대로 배송하므로 요청한 것과 다른 순서로 도착할 수 있으며 항목을 분할하여 해당 주문의 일부가 먼저 도착할 수도 있습니다 (위보다 훨씬 좋음). 궁극적으로 이것은 1) 전체적으로 모든 것을 더 빨리 얻고 2) 각 품목이 도착하면 작업을 시작할 수 있음을 의미합니다 ( "오, 내가 생각했던 것만 큼 좋지 않아서 다른 것을 주문하거나 대신 주문할 수 있습니다" ).
물론 우체부 밴의 크기 (대역폭)에 의해 여전히 제한되어 있으므로 그날에 꽉 차면 다음 날까지 일부 소포를 분류 사무실에 남겨 두어야 할 수도 있지만 거의 문제가되지 않습니다. 실제로 주문을주고받는 지연과 비교하면 대부분의 웹 브라우징에는 부피가 큰 패키지가 아닌 작은 글자를 앞뒤로 보내는 것이 포함됩니다.
도움이되기를 바랍니다.
Simple Ans ( Source ) :
멀티플렉싱은 브라우저가 여러 요청을 보내고 단일 TCP 연결로 "번들 된"여러 응답을받을 수 있음을 의미합니다. 따라서 DNS 조회 및 핸드 셰이크와 관련된 워크로드는 동일한 서버에서 오는 파일에 대해 저장됩니다.
복잡 / 상세 답변 :
@BazzaDP에서 제공하는 답변을 확인하십시오.
HTTP 2.0의 멀티플렉싱은 단일 연결을 사용하여 여러 요청과 응답을 병렬로 전달하여이 프로세스에서 많은 개별 프레임을 생성하는 브라우저와 서버 간의 관계 유형입니다.
멀티플렉싱은 엄격한 요청-응답 의미 체계에서 벗어나 일대 다 또는 다 대다 관계를 가능하게합니다.
참고 URL : https://stackoverflow.com/questions/36517829/what-does-multiplexing-mean-in-http-2
'code' 카테고리의 다른 글
Laravel 5 Eloquent where 및 또는 in 절 (0) | 2020.11.30 |
---|---|
Scala 배열을 Scala vararg 메서드에 전달하는 방법은 무엇입니까? (0) | 2020.11.30 |
Enum의 초기 값 (0) | 2020.11.30 |
경로 대신 URL에 파일이 있는지 확인하십시오. (0) | 2020.11.30 |
자산 속도 향상 : Rails 3.1 / 3.2 Capistrano 배포로 사전 컴파일 (0) | 2020.11.30 |