我爱编程

HTTP/2 Features and iOS or Andro

2016-09-17  本文已影响1234人  moubuns

HTTP


HTTP/0.9 - HTTP/1.1


HTTP面临的问题


WebRequest

目前的解决方法

SPDY(Speed)

HTTP/2


HTTP/2特性

与HTTP1.x兼容

使用NPN或者ALPN在请求之前确定应该如何使用哪种协议来通讯.

NPN与ALPN的区别在于: 谁来决定会话所使用的协议
ALPN:客户端先发送一个协议优先级列表给服务器,有服务器选择合适的
NPN:服务通知客户端所有它支持的格式,客户端来选合适的进行通信

NPN已经被ALPN取代

二进制协议

多路复用Multiplexing

Multiplexing 在一个TCP连接里,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分,接着回应B请求,完成后,再发送A请求剩下的部分。 ——

数据流

优先级和依赖性

头压缩 HPack


ServerPush-1294

HTTP连接管理

HTTP/2连接是永久性的。为了最佳的性能,它期待直到确定与服务端的进一步沟通不再必要的时候,客户端才会关闭连接(例如,当用户导航到其他特定的网页),或者直到服务端关闭连接。

Chrome Debug


  1. 使用Node.js 搭建一个建议HTTP2服务器
    https://github.com/molnarg/node-http2

  2. 使用Developer Tools来查看HTTP与HTTP/2的区别



    可以看出HTTP/2使用一条TCP连接完成所有的资源请求

  3. 查看HTTP/2的建立与帧传输
    chrome://net-internals/#http2

  4. WireShark也支持抓包,不过因为HTTP/2走了TLS,所以要做一些代理处理,不做解释。

Mobie


iOS


NSURLSession


ASPN


总结

iOS同学基本上,如果使用了URLSession去做网络请求可以啥都不用干,只要Server支持HTTP/2就可以了

Android


没有写过安卓...本部分仅参考

OKHttp


REF

http://kamranahmed.info/blog/2016/08/13/http-in-depth/ HTTP协议简介
https://github.com/square/okhttp 安卓Http网络请求的实现
https://github.com/kylef/hpack.swift hpackSwift实现
https://github.com/curl/curl libcurl
https://github.com/nghttp2/nghttp2 curl里HPack的实现
https://github.com/apple/swift-corelibs-foundation Swift版本Foundation实现
http://opensource.apple.com/source/CF/CF-1153.18/
https://http2.github.io/
http://httpwg.org/specs/rfc7540.html RFC7540 HTTP2.0详细实现
http://www.chromium.org/spdy/spdy-whitepaper
https://developer.apple.com/videos/play/wwdc2016/711/ NSURLSession: New Features and Best Practices
https://developer.apple.com/videos/play/wwdc2015/711/ Networking with NSURLSession
https://developer.apple.com/videos/play/wwdc2015/720/ What’s New in Notifications
https://developer.apple.com/videos/play/wwdc2015/724/
What’s New in Apple Push Notification Service

上一篇 下一篇

猜你喜欢

热点阅读