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. ASP.NET Core 1.0 入门——Application Startup

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  2. React Native填坑之旅--Navigation篇

    React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...

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

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

  4. url的路径设置问题

    在外联样式表中设置url的路径时.格式--> url(‘../img/xx.xx’) 注意前面两个 ‘ . ’,如果css样式写在内联样式表中,则可省略两个 ‘ . ’.

  5. php 正则

    1.中括号 [0-9]匹配0-9 [a-z]匹配a-z小写字母 [A-Z]匹配A-Z大写字母 [a-zA-Z]匹配所有大小写字母 可以使用ascii来制定更多 2.量词 p+匹配至少一个含p的字符串 ...

  6. cs程序添加初始化加载

    this.Name = "mysirst"; this.Text = "车辆窗体程序"; this.Load += new System.EventHandle ...

  7. Android中的TabHost

    TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情,FrameLayout是Tab内容. 实现方法:继承TabActivit ...

  8. FastCgi 与 PHP-FPM

    - 如果现在请求的是 /index.php,根据配置文件,nginx 知道这个不.是静态文件,需要去找 PHP 解析器来处理,那么他会把这个请求简单处理后交给 PHP 解析器.Nginx 会传哪些数据 ...

  9. Texture2D.GetPixelBilinear(float u, float v)的使用,官方例子注释

    using UnityEngine; using System.Collections; public class TEST : MonoBehaviour { public Texture2D so ...

  10. poj 1099

    http://poj.org/problem?id=1099 #include<stdio.h> #include<string.h> #include <iostrea ...