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. git ignore

    我最初将整个项目push到远程仓库,但是项目代码里面有大文件,从而传输太费时间了. 看网上的说法,可以通过ignore文件达到不提交某些文件的效果,尝试了一下发现不行. 后来尝试清除缓存 $ git ...

  2. Java/Android 二进制数据与String互转

    将经过加密的二进制数据保存到本地的方法 byte[] src = new byte[] { 122,-69, -17, 92, -76, 52, -21, -87, -10, 105, 76, -75 ...

  3. 手机移动端confirm替换方案

    //弹框 ;(function () { var ConfirmBox = function (options){ this.defaults = { title:"", topT ...

  4. 超级编辑器--VIM的常见操作

    如下,都是我常用的 删除单词:  d + w 关闭vim窗口:   :q   或者 shift + zz 全部向左移: shift + v  --->  shift + <   ---&g ...

  5. Freemarker 内置函数 数字、字符串、日期格式化用法介绍

    在用FreeMarker过程中,感觉FreeMarker的字符串,日期,集合等处理能力还是很强大的,上网搜了一些资料,整理如下,以便能帮助大家更熟练的应用Freemarker完成项目开发. 一.Seq ...

  6. NSIS(001)检测和结束进程是否运行?

    配合插件:killer.dll 导入DLL:ReserveFile "${NSISDIR}\Plugins\killer.dll" 使用方法: ;可以检测和结束32位程序进程和64 ...

  7. 在ubuntu上配置nginx+php+mysql+phpmyadmin

    1.先更新ubuntu系统 更新命令 sudo apt-get update sudo apt-get upgrade 2 添加ubuntu nginx更新源镜像 cd /etc/apt/ sudo ...

  8. node安装笔记

    安装node.js1.下载node可以直接下载二进制,也可以下载源代码再安装.我选择下载二进制: https://nodejs.org/dist/v4.6.0/node-v4.6.0-linux-x6 ...

  9. LaTex随笔

    最近简单接触了LaTex排版,留下一些笔记供日后参考. 1.基本格式 \documentclass{article}\title{……}\begin{document}\maketitle\secti ...

  10. Kernels

    Let \(E\) be a set and  \(\mathscr{E}\)  a \(\sigma\)-algebra of subsets of  \(E\). Assume that the ...