关于 iOS HTTP2.0 的学习实践
来源:互联网 发布:java sleep cpu 编辑:程序博客网 时间:2024/05/16 14:27
本文的大概思路是介绍 HTTP1.1 的弊端、HTTP2.0 的优势.
HTTP 1.1
虽然 HTTP1.1 默认是开启 Keep-Alive 长连接的,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点,但是依然存在 head of line blocking,如果出现一个较差的网络请求,会影响后续的网络请求。为什么呢?如果你发出1、2、3 三个网络请求,那么 Response 的顺序 2、3 要在第一个网络请求之后,以此类推
针对同一域名,在请求较多的情况下,HTTP1.1 会开辟多个连接,据说浏览器一般是6-8 个,较多连接也会导致延迟增大,资源消耗等问题
HTTP1.1 不安全,可能存在被篡改、被窃听、被伪装等问题。当然,前阵子 Apple 推广 HTTPS 的时候,相信很多人已经接入 HTTPS
HTTP 的头部没有压缩,header 的大小也是传输的负担,带来更多的流量消耗和传输延迟。并且很多 header 是相同的,重复传输是没有必要的。
服务端无法主动推送资源到客户端
HTTP1.1的格式是文本格式,基于文本做一些扩展、优化相对比较困难,但是文本格式易于阅读和调试,但HTTPS之后,也变成二进制格式了,这个优势也不复存在
HTTP2.0
在 HTTP2.0中,上面的问题几乎都不存在了。HTTP2.0 的设计来源于 Google 的 SPDY 协议,如果对 SPDY 协议不了解的话,也可以先对 SPDY 进行了解,不过这不影响继续阅读本文
HTTP 2.0 使用新的二进制格式:基本的协议单位是帧,每个帧都有不同的类型和用途,规范中定义了10种不同的帧。例如,报头(HEADERS)和数据(DATA)帧组成了基本的HTTP 请求和响应;其他帧例如 设置(SETTINGS),窗口更新(WINDOW_UPDATE), 和推送承诺(PUSH_PROMISE)是用来实现HTTP/2的其他功能。那些请求和响应的帧数据通过流来进行数据交换。新的二进制格式是流量控制、优先级、server push等功能的基础
流(Stream):一个Stream是包含一条或多条信息、ID和优先级的双向通道
消息(Message):消息由帧组成
帧(Frame):帧有不同的类型,并且是混合的。他们通过stream id被重新组装进消息中
iOS 客户端接入HTTP 2.0
iOS 如何接入 HTTP 2.0呢?其实很简单:
保证服务端支持 HTTP2.0,并且留意下 NPN 或 ALPN
客户端系统版本 iOS 9 +
使用 NSURLSession 代替 NSURLConnection
客户端是使用 h2c 还是 h2,它们可以说是 HTTP2.0的两个版本,h2 是使用 TLS 的HTTP2.0协议,h2c是运行在明文 TCP 协议上的 HTTP2.0协议。浏览器目前只支持h2,也就是说必须基于HTTPS部署,但是客户端可以不部署HTTPS,因为我司早已部署HTTPS,所以我这里的实践都是基于h2的
iOS HTTP/2 Server Push 探索
HTTP/2 on iOS
HTTPS 与 HTTP2 协议分析
http2讲解
How to get HTTP protocol version from a given NSHTTPURLResponse
- 关于 iOS HTTP2.0 的学习实践
- HTTP2.0 HTTPS学习
- http2.0 的优势
- Java9 HTTP2.0 API入门与实践
- Java9 HTTP2.0 API入门与实践
- 对HTTP2.0的了解
- http2.0协议的特点
- Http2.0
- HTTP2.0
- HTTP2.0
- HTTP2.0与HTTP1.0的区别
- HTTP2.0与HTTP1.0的区别
- http1.X 和 http2.0 的区别
- http2.0与http1.X的区别
- http2的调试方法
- SPDY与HTTP2.0
- http与http2.0
- HTTP2.0协议
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- 设计模式二 观察者模式
- Crane(POJ-2991)(线段树)
- js基本知识比较系列三:事件
- JAVA事务的概念
- 关于 iOS HTTP2.0 的学习实践
- 《JavaFX应用程序添加HTML内容》-JavaFX WebView组件概述
- JUnit之扩展IntrumentationTest框架
- 报错TypeError: pool_2d() got an unexpected keyword argument 'ws'
- 258. Add Digits
- Leetcode 64. Minimum Path Sum
- MySQL5.7.17安装教程
- 关于ceph client创建RBD报错的解决方法
- BZOJ3443: 装备合成