2017-05-03 1 views
3

Google 웹 사이트에서 H2를 사용하도록 설정하는 중입니다. 테스트하는 동안 일부 리소스가 Http/1.1 및 다른 대부분의 H2를 사용하여 요청한 것으로 보입니다. 흥미롭게도 동일한 리소스가 하나의 경로를 통해 요청 될 때 http/1.1을 사용하는 것처럼 보이고 다른 지점에서 H2를 사용하는 것으로 보입니다.일부 리소스에 H2 대신 Http/1.1을 사용하는 이유

  • 내가 크롬 버전 58.0.3029.96 (64 비트)
  • 모두 자원이 같은 원점에서 요청 시크릿 모드에서 실행 OSX 시에라에서 실행을 사용하고 있습니다.

아래에서 Chrome 개발자 도구의 스크린 샷을 참조하십시오.

enter image description here

이 외에도 HTTP를 사용하여/1.1 요청하는 몇 가지 다른 자원이 있습니다. 왜 이런 일이 일어나고 있는지에 대한 아이디어가 있습니까? 또한 http/2에서 http/1.1로 전환 할 때 동일한 연결이 재사용되는 것처럼 보일 수 있으며 이는 또한 헤드 블로킹 문제를 일으킬 수 있습니까?

enter image description here

enter image description here

은 여기에 어떤 도움을 주시면 감사하겠습니다!

+0

당신은 이것을위한 해결책을 찾았습니까? 안녕하세요. 비슷한 문제가 있습니다. – Jimbo

답변

1

HTTP/1.1이 사용되는 이유는 설명 할 수 없지만 스크린 샷에서 제공 한 제한된 정보를 기반으로하는 HTTP/1.1이 사용되지 않는 이유는 설명 할 수 없습니다.

둘 다 같은 출신인지 100 % 확신합니까? 리소스가 캐시에서 제공되고 HTTP/1.1로 캐싱 되었습니까?

또 다른 이유는 동일한 페이지를 두 번로드하면 동일한 소스가 두 번 이상로드가 잘못된 것처럼 보이는 이유입니다. 변경되는 데이터 (예 : JSON 요청)는 충분하지만 jquery-UI를 여러 번로드하거나 동일한 CSS 파일을로드하는 이유를 이해하지 못합니다. 매우 이상한 사용 사례로 보이며 최소한 다시 사용하려면 캐싱해야합니다.

두 번째 질문의 경우 HTTP/2에서 같은 출처에 동일한 연결이 재사용됩니다 (동일한 https cert와 동일한 IP 주소에 별도의 가상 호스트가있는 경우 특정 유스 케이스에서 동일한 효과가 발생합니다) . 이것은 이 아닙니다.은 HTTP/2 프로토콜이이 시나리오를 위해 특별히 설계되었으며 멀티플렉싱을 사용하여 요청을 혼합하기 때문에 회선 차단 기능을 제공합니다.

그러나 이것은 클라이언트, 서버 및 대역폭에 따라 요청이 dev 도구에 나타나는 방식을 변경합니다. 예를 들어 다운로드에 5 초가 걸리는 두 개의 리소스에 대한 요청이 있다고 가정 해 보겠습니다. HTTP/1에서.1 당신은 볼 것이다 :

Request 1: start 0 seconds, end 5 seconds. 
Request 2: start 5 seconds, end 10 seconds. 
Total time to download could be calculated as: 5s + 5s = 10s 
Overall Page load time would be 10 seconds 

HTTP/2에서이 (가정 첫 번째 요청이 전체 첫째로 다시 전송하는 우선 순위를했다)가 표시 될 수 있습니다

예 2A

Request 1: start 0 seconds, end 5 seconds. 
Request 2: start 0 seconds, end 10 seconds. 
Total time **looks** be 5s + 10s = 15s 
Overall Page load time would still be 10 seconds 

또는 b andwidth 동시에 비행에 모두 요청을 처리하고 서버 1 초 후 첫 번째보다 두 번째 요청에 응답하는 경우 :

예 2B

Request 1: start 0 seconds, end 5 seconds. 
Request 2: start 0 seconds, end 6 seconds. 
Total time **looks** be 5s + 6s = 11s 
Overall Page load time would be 6 seconds 

포인트는 HTTP/2에서 느린 "봐"한다 , 전체 시간이 예제 2a의 경우와 같고 실제로 예제 2b의 경우 4 초 빠름에도 불구하고 파트를 합산하려고 시도하면됩니다. HTTP/1.1과 HTTP/2 사이의 개발자 도구의 기본과 유사한 개별 요청을 비교할 수 없습니다.

HTTP/2에서 여러 연결을 열어 관리하는 오버 헤드가 없다는 점을 제외하면 여러 HTTP/1.1 요청 (브라우저는 일반적으로 호스트 당 4-8 연결을 하나만 열기 때문)을 비교하는 것과 같은 방식입니다. 프로토콜로 그리고 HTTP/2에서는 브라우저와 서버를 통해 4-8 제한이 없기 때문에 종종 Apache defaults to 100 for example을 구현합니다.

아직 HTTP/2를 최대한 활용하기 위해 클라이언트와 서버 모두에서 여전히 많은 최적화가 이루어지고 있다고 나는 생각합니다. 인터넷은 또한 HTTP/1.1에 대해 많이 최적화되어 있으며 HTTP/1.1의 작동 방식에 따라 HTTP/2를 최대한 활용하기 위해 실행 취소 또는 조정이 필요할 수 있습니다. 예를 들어, 일반적으로 페이지로드는 HTML을로드 한 다음 CSS를로드하고 자연스럽게 우선 순위를 부여합니다. HTTP/2에서는 모든 애셋을 동시에 요청할 수 있지만 실제로는 이미지에 CSS를 우선 적용해야합니다. 대부분의 브라우저가이 작업을 수행하지만 가장 최적의 방식으로 수행합니까?

+0

검색어와 관련하여 Chrome 개발자 도구에서 '캐시 사용 중지'를 사용하여 실행 중이므로 GET 요청이 모두 동일한 출처에서 요청되었습니다. – mithrandir

+0

그렇다고해서 GET 요청이 모두 같은 출처에서 요청되었다는 의미는 아닙니다. 그러나 나는 그것이 캐시에서 읽히지 않는다는 것을 의미한다고 동의합니다. –

+0

:-). 두 번 확인했는데 두 가지 모두 같은 출처에서 가져 왔습니다. 또한 헤드 - 오브 - 라인 블로킹에 대한 나의 관심은 기본적으로 H/1.1뿐만 아니라 H/2에도 동일한 연결이 사용 된 것으로 보입니다. 그래서 H/1.1을 사용할 때 head-of-line을 차단할 기회가 없을까요? – mithrandir

관련 문제