当前网络环境中,同一个页面发出几十个HTTP请求已经是司空见惯的事情了。在HTTP/1.1中,请求之间完全相互独立,使得请求中冗余的首部字段不必要地浪费了大量的网络带宽,并增加了网络延时。以对某站点的一次页面访问为例:
在Android中使用FlatBuffers
在Android中使用Protocol Buffers
网络性能优化的终极手法就是不通过网络传输,但这常常是不可能的。但我们还是可以通过对网络传输的数据本身做优化,来获得更好的性能,性能就应该从每一个可能的地方榨取。这里来看一下 Protocol Buffers 。
Protocol Buffers 是一个序列化结构数据的灵活、高效且自动化的机制——类似于XML,但更小,更快,更简单。定义一次结构化数据的方式,然后就可以使用专门生成的代码简单地写入,或用不同的语言从大量的数据流读出结构化数据。甚至可以更新数据结构而不破坏已部署的基于 老 格式编译的程序。我们看一下要如何将 Protocol Buffers 用到我们的Android项目中。
在Java中使用Protocol Buffers
这份教程为Java开发者提供了使用 Protocol Buffer 的基本介绍。通过创建一个简单的示例应用,它展示了
- 在 .proto 文件中定义消息格式。
- 使用 Protocol Buffer 编译器。
- 使用Java Protocol Buffer API读写消息。
在C++中使用Protocol Buffers
HTTP/2 流量调试
非对称加密与证书
SSL/TLS是一个密码学协议,它的目标并不仅仅是网页内容的加密传输。SSL/TLS的主要目标有四个:加密安全、互操作性、可扩展性和效率。对于安全性的保障,它还会从多个方面进行,包括机密性,真实性以及完整性。机密性是指,传输的内容不被除通信的双方外的第三方获取;真实性是指,通信的对端正是期待的对端,而不是其它第三方冒充的;完整性则是指,传输的数据是完整的,数据没有被篡改或丢失。为了平衡多种需求,SSL/TLS被设计为一个安全框架,其中可以应用多种不同的安全方案,每种方案都由多个复杂的密码学过程组成。不同的安全方案,在安全性和效率之间有着不同的取舍,并由不同的密码学过程组成。
OkHttp3 HTTP请求执行流程分析
OkHttp3的基本用法
使用OkHttp3发送Http请求并获得响应的过程大体为:
- 创建OkHttpClient对象。OkHttpClient为网络请求执行的一个中心,它会管理连接池,缓存,SocketFactory,代理,各种超时时间,DNS,请求执行结果的分发等许多内容。
- 创建Request对象。Request用于描述一个HTTP请求,比如请求的方法是”GET”还是”POST”,请求的URL,请求的header,请求的body,请求的缓存策略等。
- 利用前面创建的OkHttpClient对象和Request对象创建Call对象。Call是一次HTTP请求的Task,它会执行网络请求以获得响应。OkHttp中的网络请求执行Call既可以同步进行,也可以异步进行。调用call.execute()将直接执行网络请求,阻塞直到获得响应。而调用call.enqueue()传入回调,则会将Call放入一个异步执行队列,由ExecutorService在后台执行。
- 执行网络请求并获取响应。