Android OkHttp官方Wiki之Calls

Http基础概述

Http客户端的工作就是接收用户的请求Request和产生返回结果Response。

  • Requests
    每一个Http请求都包含了URL,请求方式(GET,POST),请求头,请求体。请求体中包含了特定数据类型的数据流。
  • Responses
    每一个响应包含了响应状态码,响应头,响应体。
  • Rewriting Requests重写请求

    当使用OkHttp进行HTTP请求时,OkHttp会在传输前重写该请求。例如OkHttp会在原始请求上添加缺少的头部数据,包括Content-Length,Transfer-Encoding,User-Agent,Host,Connection和Content-Type。同时也会在没有添加Accept-Encoding头部字段时帮助我们添加这个头部字段来压缩响应结果。当获取到Cookies时,OkHttp也会使用它们添加Cookie头部字段。
    有时一些请求会有缓存的响应结果,如果这些响应结果过时了,可以在请求头部字段添加If-Modified-Since和If-None-Match字段,然后OkHttp会自动下载并更新这些缓存响应结果。

    Rewriting Responses重写响应

    当在请求头部字段中添加了压缩字段时,OkHttp会丢弃响应头部字段中的Content-Encoding和Content-Length字段,因为这些字段不适合减少响应结果的体积。
    当GET或者POST请求成功时,会从网络上获取响应结果并按规范更新合并缓存Cache。

    Follow-up Requests后续请求

    当你请求的URL不存在时,服务器会返回响应状态码302来指出Http文档的新URL。OkHttp会自动重定向到新的URL去重新检索响应结果。
    如果获取的响应结果需要授权信息,如果在OkHttp中配置了某些参数,那么OkHttp会调用Authenticator接口来提供授权信息以获取响应结果。如果认证者提供了证书,那么OkHttp会重新发起请求并附带授权证书。

    Retrying Requests重发请求

    如果网络连接失败,例如连接池过时,断线或者服务器无法到达,OkHttp会尝试使用不同的可用路由线路重新发起请求。

    Calls接口

    public interface Call extends Cloneable

    Call是OkHttp中用来执行发起请求的接口。Call可以使用execute来发起请求,也可以使用cancel来取消请求。一个Call对象代表一个简单的request或者response,只能execute执行一次,不能执行两次。
    OkHttp中有了上述的重写,重定向,后续请求和重发请求等特性,用户就可以简单的发起请求和获取响应了。OkHttp使用Call对象来作为请求的模型,Calls可以使用两种不同的方式来执行:

  • Synchronous同步
    发起请求的线程会阻塞直到读取到响应内容
  • Asynchronous异步
    可以将请求添加到任何一个线程队列中,然后当响应可读取信息时,可以在另一个线程中获取回调响应
  • 当Call请求还没完成时,可以在任何一个线程中取消Calls请求,但是要注意在输入request请求体或者读取response响应体时,如果取消了Call请求,会发生IOException异常。

    Dispatch调度

    对于同步的请求Call,用户需要负责管理发起同步请求的线程,需要注意发起同步请求的数量,太多的同步请求会造成资源浪费,太少则会导致延迟。
    对于异步的请求Call,Dispatcher调度器会按照策略来执行最大数量的同步请求。你可以设置自己的策略,例如per-webserver的最大数量(默认是5),或者全部(默认64)。

    参考链接:https://github.com/square/okhttp/wiki/Calls

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值