“流”是一个HTTP/2连接内在客户端和服务器间独立的双向的交换的帧序列。流具有一些重要的特性:
HTTP/2规范:3. 启动 HTTP/2
一个HTTP/2连接是一个运行于一个TCP连接([TCP] )之上的应用层协议。客户端是TCP连接的发起者。
HTTP/2使用了与HTTP/1.1所使用的相同的”http”和”https” URI schemes。HTTP/2共享了相同的默认端口号:”http” URIs的是80,”https” URIs的是443。作为结果,HTTP/2的实现在为处理诸如 http://example.org/foo 或 https://example.com/bar 这样的URIs的目标资源的请求时,需要首先发现upstream server(客户端希望建立连接的中间对端)是支持HTTP/2的。
HTTP/2规范:2. HTTP/2 协议总览
HTTP/2为HTTP语义提供了一个优化的传输方式。HTTP/2支持HTTP/1.1所有的核心功能,但在一些方面又更加高效。
HTTP/2中基本的协议单元是一个帧(Section4.1)。每一个帧类型服务于一个不通的目的。比如,HEADERS和DATA帧构成了HTTP请求和响应的基础(Section8.1);其它的帧类型,比如SETTINGS,WINDOW_UPDATE,和PUSH_PROMISE被用于支持其它的HTTP/2功能。
HTTP/2规范:1. 简介
chromium net到android平台的移植
Chromium net是chromium浏览器及ChromeOS中,用于从网络获取资源的模块。这个网络库是用C++编写的,且用了大量的C++11特性。它广泛地支持当前互联网环境中用到的大量的网络协议,如HTTP/1.1,SPDY,HTTP/2,FTP,QUIC,WebSockets等;在安全性方面也有良好的支持,如SSL等;同时,针对性能,它也有诸多的优化,如引入libevent的基于事件驱动的设计。从而,将chromium net库移植到android平台上并用起来,以提升我们的APP的网络访问性能成为了一件非常有价值的事情。
Chromium Android编译指南
先决条件
需要有一台装有Linux操作系统环境的主机来做编译,这个环境的搭建配置方法可以参考Linux-specific build instructions。目前还不支持在其它(Mac/Windows)平台上来为Android编译Chromium。
Chromium net design
总览
网络栈主要地是一个单线程跨平台的库,主要负责资源获取。它的主要接口是URLRequest
和URLRequestContext
。URLRequest
,
正如它的名字所表明的那样,表示一个URL的请求。URLRequestContext
包含实现URL请求所需的所有相关上下文,比如cookies,主机解析器,代理解析器,cache,等等。多个URLRequest
对象可以共享相同的URLRequestContext
。大多数的net对象不是线程安全的,尽管磁盘缓存可以使用一个专门的线程,而一些组件(主机解析,证书验证等等)可以使用unjoined worker线程。由于它主要运行于一个单独的网络线程上,因而在网络线程上的操作都不允许阻塞。所以我们通过异步的回调(典型的是CompletionCallback)来使用非阻塞操作。网络栈的代码也会把大多数操作记录到NetLog,它允许消费者把表示操作的说明记录到内存中,并以用户友好的格式用于调试中。