HTTP/2.0 服务器推送实现

35岁的程序员 2018-03-16 17:13:09 ⋅ 421 阅读

前言

        HTTP/2.0发布于2015年,作为新一代HTTP协议,其由于推进互联网加密技术的使用,所以只能作用于https连接当中。HTTP/2.0提供HTTP语义的有效序列化,是一个二进制协议,所有的框架开始一个8字节的头,紧跟着的0和16.383个八位位组之间的有效载荷。当然HTTP的复用性也是其一大特点,而新定义的HTTP请求与响应映射到流的新互动模式,也就是我今天要说的服务器推送。

 服务器推送

        HTTP/2允许服务器在请求之前先推送响应信息到客户端(之前客户端有过请求),如果实现了HTTP缓存,推送的响应信息可以在客户端被缓存(可通过no-cache进行配置)。

    (注意:HTTP/2是持久连接,为了实现最佳性能,预计客户端在确定不需要与服务器进一步通信时或者服务器关闭连接时才会关闭连接,所以客户端不应该打开多个同一IP与端口的连接。)

    对于HTTP/2的推送详细说明在官方文档种过于繁杂,下面将以更为简单的方式来进行说明。


    普通请求

    左图表示一个正常情况下的一个简单的页面请求,一个HTML页面我们要进行页面请求与页面包含的样式文件请求,如果有页面中有图片等页面文件时请求次数将会更多。

    当然,我们可以通过:

<link rel="preload" href="/styles.css" as="style">

    这种形式来进行资源预加载,但是不同类型的代码整合已经不符合代码规则,虽然速度有所提升,但是HTTP请求次数并没有减少。

    服务器推送

    右图中表示通过只通过一次HTML请求,就同时把样式、图片等全部发送给浏览器,通过一次通信获得所有资源。

实现方式

Nginx实现

在nginx的conf配置文件中,添加http2_push命令,表示请求根目录"/"时,会推送这两个文件。(如果有多个文目录时需要写多个,方法繁琐,每次修改都要重启,不推荐)

server {
    listen 443 ssl http2;
    ···//省略
    location / {
      ···//省略
      http2_push /style.css;
      http2_push /example.png;
    }
}
   Apache 实现

    在httpd.conf文件中加入(不推荐,理由同上)

<FilesMatch "\index.html$">
    Header add Link "</styles.css>; rel=preload; as=style"
    
    Header add Link "</example.png>; rel=preload; as=image"
</FilesMatch>
    后端实现

    通过在应用生成HTTP 回应的头信息中设置Link命令(推荐),服务器在收到包含Link的头信息时,就会进行推送,例如:

Link: </styles.css>; rel=preload; as=style, </example.png>; rel=preload; as=image

    服务器推送方式据说可以提高8%左右的打开速度,有兴趣的朋友可以测试一下,有结果记得给我反馈一下哦。

    更多精彩内容请关注“IT实战联盟”公众号哦~~~



全部评论: 0

    我有话说:

    老板说:明天来加班写个FCM消息功能......

    基于Spring Boot集成Firebase实现FCM消息功能

    3分钟学会 React-Native 消息【附源码】

    作为一个独立的APP应用怎么能没有消息呢?

    Netty 最佳实践

    很多同学给我发邮件或者微博私信我,咨询服务相关...

    smart-http 1.0.18 发布,轻量级的国产 HTTP 服务器

    smart-http 是一款采用 Java 语言编写的 Http 服务器,有别于业界知名的 Web容器:Tomcat、Undertow,smart-http 并不支持 Servlet 规范,但对于

    Dubbo3.0 来了:服务发现百万集群,可伸缩微服务架构

    来自:高可用架构原文:https://mp.weixin.qq.com/s/_Ih4AyL2c1JjyLwKCPmphg 本文是一篇关于 Dubbo 地址性能的压测文章,我们期望通过对比的方式

    Puma 5.2.1 发布,关注高并发的 Ruby HTTP 服务器

    Puma 5.2.1 发布了。Puma 是一个简单、快速、线程化并且关注高并发的 HTTP 1.1 服务器,适用于开发和生产中的 Ruby/Rack 应用。 本次更新内容包括: 修复 TCP

    Mir 2.2.0 发布,Ubuntu 显示服务器

    Mir 2.2.0 现已发布。Mir 是一个 Linux 操作系统下的显示服务器,它用于构建基于 Wayland 的 Shell 的库集,简化了 Shell 作者需要

    Nodejs 搭建https服务器

    第一部分 搭建https服务器 前奏首先需要理解几个概念 HTTPS HTTP是一个网络协议,是专门用来传输 Web 内容; SSL(Secure Sockets Layer)的缩写

    开源分布式配置中心 Apollo 1.8.0 发布

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景

    Nodejs 搭建https服务器

    HTTP是一个网络协议,是专门用来传输 Web 内容

    服务架构实战篇:快速入手SpringBoot 2.0,欢迎入坑哦~~~

    SpringBoot 2.0 基本要求Java最低要求8以上,不再支持Java 6 和 7等低版本。

    「尝鲜」SpringBoot 快速整合Swagger 3.0

    第一步:Maven引入Swagger3.0 starter依赖 Maven项目中引入springfox-boot-starter依赖: <dependency> <

    开源 Servlet 服务器 smart-servlet v0.1.1 发布

    smart-servlet 是一款实现了 Servlet 3.1 规范,支持多应用隔离部署的的 Web 服务器。 smart-servlet 在 smart-http 的基础之上,通过继承

    Helidon 2.1.0 发布,Oracle 微服务框架

    Helidon 2.1.0 现已发布,这是一个次要发行版,包含了一些错误修复和增强功能。Helidon 是 Oracle 开源的一个用于编写微服务的 Java 框架,这些微服务运行在由 Netty

    好文推荐:我是如何用redis做实时订阅

    目前项目已上前线,运行平稳~~~

    【开源资讯】JWCloud 专业版 v1.0.0 发布,基于 SpringCloud 研发的微服务框架

    简介 JavaWeb_Cloud 微服务平台是一款基于 SpringCloud 框架研发的分布式微服务框架,主要使用技术栈包括: SpringCloud、Vue、ElementUI

    微信小程序微商城(一):https框架搭建并实现导航功能

    本文将带领大家搭建https的小程序框架,并实现动态获取数据展示效果!