• 技术文章 >web前端 >js教程

    关于HTTP/2服务器推送

    php中世界最好的语言php中世界最好的语言2017-12-30 18:00:23原创1362
    在说HTTP/2服务器推送之前首先我们要知道,HTTP/2被设计为解决HTTP/1.x的许多缺陷。当代网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP/1.x中这些资源每一个都必须明确地请求。这可能是一个很慢的过程。所以浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。

    为了改善延迟,HTTP/2引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前。一个服务器经常知道一个页面需要很多附加资源,在它响应浏览器第一个请求的时候,可以开始推送这些资源。这允许服务端去完全充分地利用一个可能空闲的网络,改善页面加载时间。

    serverpush.svg.png

    在协议层,HTTP/2 server push被push_promise 帧所驱动,一个PUSH_PROMISE描述了一个请求,即服务端预测浏览器将马上要发出的请求。浏览器一收到PUSH_PROMISE,它马上知道服务端将要传输这个资源。如果浏览器后续发现它需要这个资源,它会等待这个推送完成,而不是发送一个新的请求。这减少了浏览器花费在网络等待上的时间 。

    net/http包中的服务端推送

    go1.8引入了来自http.Server对推送响应的支持。如果运行的server是一个HTTP/2的服务,并且进来的连接是使用HTTP/2的时候,这个特性是可用的。在任意一个HTTP handler中,你可以判断http.ResponseWriter是否支持服务端推送,通过检查它是否实现了新的http.Pusher接口。

    例如,如果server知道app.js将要被请求来渲染页面,如果http.Pusher可用,handler可以初始化一个push。

     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的使用过程中如何自定义console对象

    以上就是关于HTTP/2服务器推送的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:HTTP 服务器 推送
    上一篇:按钮的Ajax请求时一次点击两次提交的解决方法 下一篇:怎样使用Vue的自定义指令完成一个下拉菜单
    千万级数据并发解决方案

    相关文章推荐

    • JavaScript高级语法学习之严格模式• angular学习之浅析HttpClientModule模块• angular学习之路由模块浅析• 浅谈Node第三方框架Express的使用方法• JavaScript学习理解之JSON(总结分享)
    1/1

    PHP中文网