> 웹 프론트엔드 > JS 튜토리얼 > HTTP/2 서버 푸시 정보

HTTP/2 서버 푸시 정보

php中世界最好的语言
풀어 주다: 2017-12-30 18:00:23
원래의
2380명이 탐색했습니다.

HTTP/2 서버 푸시에 대해 이야기하기 전에 먼저 HTTP/2가 HTTP/1.x의 많은 단점을 해결하도록 설계되었다는 점을 알아야 합니다. 최신 웹 페이지는 HTML, 스타일시트, 스크립트, 이미지 등 다양한 리소스를 사용합니다. HTTP/1.x에서는 이러한 각 리소스를 명시적으로 요청해야 합니다. 이는 느린 과정일 수 있습니다. 따라서 브라우저는 HTML을 가져오는 것부터 시작한 다음 페이지를 구문 분석하고 평가하면서 점차적으로 더 많은 리소스를 가져옵니다. 서버는 브라우저가 모든 요청을 수행할 때까지 기다려야 하기 때문에 네트워크가 유휴 상태이거나 사용량이 적은 경우가 많습니다.

지연 시간을 개선하기 위해 HTTP/2는 서버 푸시를 도입했습니다. 이를 통해 브라우저가 명시적으로 리소스를 요청하기 전에 서버가 브라우저에 리소스를 푸시할 수 있습니다. 서버는 종종 페이지에 많은 추가 리소스가 필요하다는 것을 알고 브라우저의 첫 번째 요청에 응답할 때 해당 리소스를 푸시하기 시작할 수 있습니다. 이를 통해 서버는 잠재적으로 유휴 상태인 네트워크를 완전히 활용하여 페이지 로드 시간을 향상시킬 수 있습니다.

serverpush.svg.png

프로토콜 계층에서 HTTP/2 서버 푸시는 push_promise 프레임에 의해 구동됩니다. 즉, 서버는 브라우저가 곧 발행할 요청을 예측합니다. 브라우저는 PUSH_PROMISE를 수신하자마자 서버가 이 리소스를 전송할 것임을 즉시 알게 됩니다. 나중에 브라우저가 리소스가 필요하다는 것을 발견하면 새 요청을 보내는 대신 푸시가 완료될 때까지 기다립니다. 이렇게 하면 브라우저가 네트워크를 기다리는 데 소요되는 시간이 줄어듭니다. net/http 패키지의 서버 푸시

go1.8에는 http.Server의 푸시 응답 지원이 도입되었습니다. 이 기능은 실행 중인 서버가 HTTP/2 서비스이고 들어오는 연결이 HTTP/2를 사용하는 경우 사용할 수 있습니다. 모든 HTTP 처리기에서 http.ResponseWriter가 새로운 http.Pusher 인터페이스를 구현하는지 확인하여 서버 푸시를 지원하는지 여부를 확인할 수 있습니다.

예를 들어 서버가 app.js가 페이지 렌더링을 요청한다는 것을 알고 있는 경우 http.Pusher를 사용할 수 있으면 핸들러는 푸시를 시작할 수 있습니다.

 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        if pusher, ok := w.(http.Pusher); ok {
            // Push is supported.
            if err := pusher.Push("/app.js", nil); err != nil {
                log.Printf("Failed to push: %v", err)
            }
        }
        // ...
    })
로그인 후 복사

위의 소개를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트

기타

관련 기사를 주목하세요! 관련 읽기:

실행할 때 JS 엔진은 어떻게 생겼나요?


네이티브 JS가 AJAX 및 JSONP를 구현하는 방법


JS를 사용하는 동안 콘솔 객체를 사용자 정의하는 방법

위 내용은 HTTP/2 서버 푸시 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿