继续OkHttp官网的翻译,今天翻译的是Features模块中的Calls页,原文地址:https://square.github.io/okhttp/features/calls/
Calls
HTTP客户端的工作是接受请求并产生响应。这在理论上很简单,但在实践中却很棘手。
Requests
每个HTTP请求都包含一个URL,一个请求方式(像 GET 或者 POST)和一个请求头列表。这些请求也可能包含一个body:一个明确类型的数据流
Responses
包含一个code,headers和一个可以可选的body的内容 对应 一个请求的结果。
这句感觉翻译的不好,大家可以自己体会下。
The response answers the request with a code (like 200 for success or 404 for not found), headers, and its own optional body.
重写请求
当你创建一个OkHttp的HTTP请求时,其实你是在上层编写代码。为了正确性和有效性,OkHttp将会在发送请求时重写它。
OkHttp也许会添加一些在原始的请求上缺省的头,包括Content-Length
,Transfer-Encoding
,User-Agent
,Host
,Connection
和Content-Type
。在透明的响应压缩(Transparent response compression)时,如果Accept-Encoding
不存在,将会添加Accept-Encoding
头。如果你要获取cookies,OkHttp将会添加cookie
头。
有些请求会使用到缓存。当缓存不是最新的时候,如果有新内容,OkHttp将会发送一个有条件的GET请求去下载最新的内容。这需要添加像If-Modified-Since
和If-None-Match
这样的头。
重写响应
如果要使用透明压缩, OkHttp会删除掉相应的相应头Content-Encoding
和Content-Length
,因为它们不能使用在无压缩的响应内容上。
如果GET请求(下载缓存内容)成功,响应内容将会把缓存和网络内容按照相关规则合并。
后续请求
当您请求的URL需要改变时,web服务器将返回一个响应代码,如302,以指示重定向到新的URL。OkHttp将跟随重定向来请求新的响应。
如果响应发出授权验证,OkHttp将要求 Authenticator
(如果配置了Authenticator)提供验证。如果Authenticator提供了凭据(credential),则会重新尝试包含该凭据的请求。
请求重试
有时连接会失败:要么池连接失效,断开连接,要么无法访问web服务器本身。这时如果有可用的路由,OkHttp将用不同的路由重试请求。
请求
通过重写、重定向、跟踪和重试,您的一个简单的请求可能会产生许多请求和响应。OkHttp使用Call来模拟通过许多中间请求和响应来满足你的请求的任务。通常这并不是很多。但令人欣慰的是,即使您的url被重定向或故障转移到另一个IP地址,您的代码会继续执行。
执行调用的方式有两种:
同步:现在在响应回来之前会阻塞
异步:您在任何线程上排队请求,并在响应回来时在另一个线程上被回调。
请求可以在任何线程取消。这将使请求失败。如果请求还没有完成,写入请求体或读取响应体的代码将会在请求被取消时将得到IOException异常。
分发
对于同步请求,当前线程负责管理您发出的请求。同时请求太多会浪费资源;太少会增加延迟。
对于异步请求,Dispatcher
实现最大并发请求策略。您可以设置每个web服务器的maximums(默认为5),以及overall(默认为64)。