HTTP/2服务端推送
来源:互联网 发布:苹果手机变音软件 编辑:程序博客网 时间:2024/06/11 11:40
翻译:shihuaping0918@163.com
【译者注:本文需要有一定的HTTP协议知识和浏览器解析页面过程知识】
原文 :https://blog.golang.org/h2push
前言
HTTP/2被设计为解决HTTP/1.x的许多缺陷。当代网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP/1.x中这些资源每一个都必须明确地请求。这可能是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。
为了改善延迟,HTTP/2引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前。一个服务器经常知道一个页面需要很多附加资源,在它响应浏览器第一个请求的时候,可以开始推送这些资源。这允许服务端去完全充分地利用一个可能空闲的网络,改善页面加载时间。
在协议层,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) } } // ... })
因时间关系,今天晚上先译到这……
- HTTP/2服务端推送
- 使用 HTTP/2 服务端推送技术加速 Node.js 应用
- 服务端极光推送2-分组推送及服务端集成
- Delphi 调用极光推送服务端HTTP API实例
- ios 推送消息 php做推送服务端(转载于http://zxs19861202.iteye.com/blog/1532460)
- android 推送消息 php做推送服务端(参考与http://fanfq.iteye.com/blog/1405385)
- HTTP服务端JSON服务端
- blazeds服务端推送数据
- IOS 推送 + java 服务端
- IOS 推送服务端代码
- 服务端推送技术
- pushlet服务端推送
- 5 服务端推送
- 做HTML5服务端推送
- 服务端极光推送
- 极光推送java服务端
- 小米推送server服务端
- 极光推送java服务端
- 身份证号码验证
- CAP理论——分布式基础理论
- 安卓自定义View进阶-分类与流程
- HDU 1561(树形DP)
- 高德地图实现公交路线-添加标记-轨迹回放-中心点-图层
- HTTP/2服务端推送
- WPF DEV PieSeries2D扇形标识线变长充满
- HDU 2087 剪花布条【最长不重复子串】【KMP】【水题】【模板题】
- python居家旅行必备的pyenv,virtualenv
- HDU 6150 Vertex Cover 构造
- python试爬李毅吧贴子标题,爬虫最初级
- python使用scrapy爬表格,爬虫中级
- skynet源码分析(1)--模块加载
- org.springframework.beans.ConversionNotSupportedException异常解决方法