1 HTTP协议协商

1.1 NPN

NPN:Next Protocol Negotiation,是由Google公司开发的用于SPDY进行协议协商扩展。

协商过程:

  • 服务端在收到客户端的client hello后,把自己支持的协议通过Server Hello

    发送给客户端
  • 客户端拿到清单后,选择一个协议在Change Cipher Spec 之后加密发送给服务端

1.2 ALPN

ALPN:Application Layer Protocol Negotiation,是IETF制定的在HTTP/2.0中使用的协议协商扩展

协商过程:

  • 客户端把自己支持的清单通过client hello发送给服务端
  • 服务端在选择一个协议后通过server hello告诉客户端应该使用哪个协议(会比NPN少一步数据交换)



1.3 说明

  • 最新的chrome和firefox已经不支持NPN
  • 要支持ALPN须将openssl升级至1.0.2版本
  • Java中要使用okhttp+openjdk+alpn-boot才能访问http2:JVM启动参数 -Xbootclasspath/p:./alpn-boot-8.1.9.v20160720.jar

2 性能简单测试

目前国内大多数网站还不支持http/2,http/2还没有大规模的使用起来,相关客户端和组件还不完善,还存在一些问题,只做了简单的一个测试:
  • 5000次访问数据、单线程、异步方式

    http:5条长连接 1568ms

    https:5条长连接 2284ms

    http2:1条连接 2083ms

  • 5000次访问数据、单线程、异步方式

    http:5条长连接 1478ms

    https:5条长连接 2057ms

    http2:5条连接 2008ms

  • 5000次访问数据、单线程、同步方式

    http:1条长连接 1992ms

    https:1条长连接 2884ms

    http2:1条连接 2879ms

  • 5000次访问数据、多线程、异步方式

    http:5条长连接 1474ms

    https:5条长连接 1956ms

    Http2:5条连接 2041ms

  • 5000次访问数据、多线程、同步方式

    http:5条长连接 1053ms

    https:5条长连接 1578ms

    http2:5条连接 1742ms

HTTP学习补充一的更多相关文章

  1. 基于CentOS的MySQL学习补充三--使用Shell批量创建数据库表

    本文出处:http://blog.csdn.net/u012377333/article/details/47006087 接上篇介绍<基于CentOS的Mysql学习补充二--使用Shell创 ...

  2. 从零开始编写自己的C#框架——框架学习补充说明

    非常感谢轩辕公子提出了对本框架的看法与意见,所以这里也将回复贴出来,让大家都了解一下 本系列的快速开发指的是,框架构建完毕后,在这个基础上开发新功能非常快捷方便,基本不用写太多代码就可以在短时间内完成 ...

  3. XMPP学习——3、XMPP协议学习补充

    流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XM ...

  4. python-类里面各种方法的学习补充

    #-*- coding:utf-8 -*- #本次学习:类里面各种方法的学习 class SeniorTestingEngineer: work_year=3 salary=15000 def cod ...

  5. jQuery中的基本的选择器学习(补充版)

    先看整体代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  6. 2016 - 1- 14 UI阶段学习补充 transform属性详解

    UIView的transform属性 transform是view的一个重要属性,它在矩阵层面上改变view的显⽰状态,能实现view的缩放.旋转.平移等功能.transform是CGAffineTr ...

  7. JAVA FILE or I/O学习 - 补充CopyFiles功能

    public class CopyFiles { public static void main(String[] args) { CopyFiles copyFiles = new CopyFile ...

  8. 2016221 Java第二周学习补充

    对switch语句的理解 在程序中遇到switch时,要将switch后的表达式与后续程序中的case常量进行比较,如若相等,程序将执行后面所有的case语句,直到遇到break 为止.如果走完整个程 ...

  9. SocketServer源码学习补充

    在前两个文章中整理了关于BaseServer部分以及BaseRequestHandler,以及通过对TCP的处理的流程的整理,这次整理的是剩下的关于用于扩展的部分,这里通过对线程扩展进行整理 Thre ...

随机推荐

  1. 第十三章:降维:主成分分析PCA

  2. Vertica数据查询优化

    vertica是惠普公司推出的列式分布式数据库,在OLAP领域有其独到的地方,目前社区版免费,但是只能存放1T的数据.我在工作中维护的bi系统后端就是使用的vertica数据库,平时也经常需要对于数据 ...

  3. <Oracle Database>数据库启动与关闭

    启动和关闭Oracle数据库 要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆.一般我们常用INTERNAL用户来启动和关闭数据库(INT ...

  4. activity管理

    public class MainApp extends Application { private static ArrayList<WeakReference<Activity> ...

  5. mysql获取所有分类的前n条记录的两种方法浅析

      项目中有个需求是获取出展会分类下的前n条展商. 刚开始的思路是用group by 获取出展会的分类,后面再根据分类获取该分类下的n个展商,但也需要第一次获取出展会的时候也获取所有的每个展会分类下的 ...

  6. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...

  7. 4..一起来学hibernate之Session详解

    后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续...

  8. C++ 非阻塞套接字的使用 (3)

    异步非阻塞套接字避免了死循环的接收问题,但是软件用起来体验还是很差.究其原因,软件在指令的发送.接收上, 采取了一种不合理的方式:在指令的发送后,立刻调用接收函数,等待回令. 若是采用同步阻塞套接字, ...

  9. c一些关键字

    register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对. extern:可以置于变量或者函数前,以标示变量或者函数的定义 ...

  10. Java Spring AOP用法

    Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...