普通拦截器,client.interceptors(); 重试、重定向拦截器 RetryAndFollowUpInterceptor; 用于客户端与服务器桥梁,将用户请求转换为服务器请求,将服务器响应转换为用户响应的的...BridgeInterceptor; 决定是否需要请求服务器并写入缓存再返回还是直接返回服务器响应缓存的 CacheInterceptor; 与服务器建立连接的 ConnectInterceptor;...Cache-Control 指 包含缓存控制的指令,例如 "no-cache" 和 "max-age" ; If-None-Match 指 客户端缓存的响应的ETag值,如果服务器返回相同的 ETag...值,则说明响应未修改,缓存有效; If-Modified-Since 指 客户端缓存的响应的最后修改时间,如果服务器确定响应在此时间后未更改,则返回304 Not Modified状态码,表示缓存有效。...OkHttp 中的的请求和响应指的是客户端创建的请求对象 Request 和 服务端返回的响应对象 Response,这两个对象用于定义请求和响应的信息。
Cache的策略如下图所示: 具体源码如下所示: 具体的逻辑如上图所示,具体可以参照上述的 Cache 流程图,这里我们再说一下 CacheStrategy 这个类,即决定何时使用 网络请求、响应缓存...普通拦截器,client.interceptors(); 重试、重定向拦截器 RetryAndFollowUpInterceptor; 用于客户端与服务器桥梁,将用户请求转换为服务器请求,将服务器响应转换为用户响应的的...BridgeInterceptor; 决定是否需要请求服务器并写入缓存再返回还是直接返回服务器响应缓存的 CacheInterceptor; 与服务器建立连接的 ConnectInterceptor;...Cache-Control 指 包含缓存控制的指令,例如 “no-cache” 和 “max-age” ; If-None-Match 指 客户端缓存的响应的ETag值,如果服务器返回相同的 ETag...值,则说明响应未修改,缓存有效; If-Modified-Since 指 客户端缓存的响应的最后修改时间,如果服务器确定响应在此时间后未更改,则返回304 Not Modified状态码,表示缓存有效
目录 使用篇 OkHttp的优点 网络处理3要素 请求Request 表单FormBody 分块MultipartBody 客户端OkHttpClient 同步请求和异步请求 其他 配置响应缓存 取消请求...响应缓存,避免同一个重复的网络请求。 2.网络处理3要素 对于客户端来讲,我们关注的就是把正确的请求发送到服务端并拿到结果来进行处理。...在OkHttp中,我认为可以分为3个部分: 请求类封装客户端发送的请求,包括请求的url,请求方法(主要是GET和POST方法),请求头标题以及请求体requestBody; 响应类封装了服务器响应的数据...OkHttp中通过建造者模式来构建OkHttpClient,请求和响应对于客户端来讲,我们不需要过多关注响应是如何构建的,因为这个是OkHttp对响应结果进行了封装处理。...响应缓存采用Http头来配置,你可以添加这样的请求头Cache-Control: max-stale=3600。 max-age指的是客户端可以接收生存期不大于指定时间(以秒为单位)的响应。
这样一来提高了响应速度,二来节省了网络带宽(也就是节省了钱)。 本文就是讲解在OKHTTP中如何配置缓存。...因此缓存也可以分为两个类型服务端侧和客户端侧。 服务端侧缓存 常见的服务端有Ngix和Apache。服务端缓存又分为代理服务器缓存和反向代理服务器缓存。常见的CDN就是服务器缓存。...客户端侧缓存 客户端主要指浏览器(如IE、Chrome等),当然包括我们的OKHTTPClient.客户端第一次请求网络时,服务器返回回复信息。如果数据正常的话,客户端缓存在本地的缓存目录。...说明服务器希望客户端不要缓存消息,但是可以进行private cache方法进行缓存。...web服务器在响应请求时,告诉浏览器资源的最后修改时间。
在进行网络编程时,经常会遇到需要通过代理服务器发送请求的情况。代理服务器可以提供多种功能,比如访问控制、数据加密、缓存、IP 隐藏等。...代理服务器的基本概念代理服务器充当客户端和目标服务器之间的中介。它接收客户端的请求,然后转发到目标服务器,并将服务器的响应返回给客户端。代理服务器可以是透明的,也可以是匿名的。...在某些情况下,代理服务器可能需要认证信息才能允许客户端通过。为什么需要设置代理访问控制:代理服务器可以控制对某些网站的访问。数据加密:代理可以加密传输的数据,提高安全性。...缓存:代理服务器可以缓存频繁访问的数据,减少延迟。IP 隐藏:代理服务器可以隐藏客户端的真实 IP 地址。在 Kotlin 中设置代理1. 添加依赖首先,确保你的项目中包含了 OkHttp 库。...示例代码以下是如何在 Kotlin 中使用 OkHttp 设置代理并发送网络请求的示例代码:kotlinimport okhttp3.
Okhttp 应该是Android目前非常流行的第三方网络库,尝试讲解他的使用以及原理分析,分成几个部分: Okhttp同步和异步使用 同步和异步流程 Dispatcher 拦截器 缓存 连接池复用...,获取response 缓存 CacheInterceptor http缓存机制 http分强缓存和协商缓存 强缓存:如果客户端命中缓存就不需要和服务器端发生交互,有两个字段Expires和Cache-Control...协商缓存:不管客户端是否命中缓存都要和服务器端发生交互,主要字段有 if-modified/if-modified-since 、Etag/if-none-match Expires:表示缓存过期时间...Cache-Control :表示缓存的策略,有两个容易搞混的:no-store 表示绝不使用缓存,no-cache 表示在使用缓存之前,向服务器发送验证请求,返回304则表示资源没有修改,可以使用缓存...,返回200则资源发生修改,需要替换 if-modified:服务器端资源的最后修改时间,响应头部会带上这个标识 if-modified-since:客户端请求会带上资源的最后修改时间,服务端返回304
代理服务器的基本概念 代理服务器充当客户端和目标服务器之间的中介。它接收客户端的请求,然后转发到目标服务器,并将服务器的响应返回给客户端。代理服务器可以是透明的,也可以是匿名的。...在某些情况下,代理服务器可能需要认证信息才能允许客户端通过。 为什么需要设置代理 访问控制:代理服务器可以控制对某些网站的访问。 数据加密:代理可以加密传输的数据,提高安全性。...缓存:代理服务器可以缓存频繁访问的数据,减少延迟。 IP 隐藏:代理服务器可以隐藏客户端的真实 IP 地址。 在 Kotlin 中设置代理 1....添加依赖 首先,确保你的项目中包含了 OkHttp 库。...在 build.gradle 文件中添加以下依赖: gradle dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.0
- 会从很多常用的连接问题中自动恢复 - 如果您的服务器配置了多个IP地址, 当第一个IP连接失败的时候, OkHttp会自动尝试下一个IP - OkHttp还处理了代理服务器问题和SSL...为了缓存响应, 你需要一个你可以读写的缓存目录, 和缓存大小的限制....大多数程序只需要调用一次new OkHttp(), 在第一次调用时配置好缓存, 然后其他地方只需要调用这个实例就可以了. 否则两个缓存示例互相干扰, 破坏响应缓存, 而且有可能会导致程序崩溃....响应缓存使用HTTP头作为配置. 你可以在请求头中添加Cache-Control: max-stale=3600 , OkHttp缓存会支持....没有响应的原因可能是客户点链接问题、服务器可用性问题或者这之间的其他东西. OkHttp支持连接超时, 读取超时和写入超时.
想象一下,你打开一个网页,浏览器就会发送一个HTTP请求给服务器,服务器收到请求后,就会把网页的数据通过HTTP响应发回来。这个过程就像是你给朋友发了一封信,朋友收到后回复你一样。...功能丰富:支持请求拦截、请求缓存、响应缓存等。 缺点 依赖OkHttp:Retrofit底层依赖OkHttp,所以需要同时引入OkHttp。...OkHttp是一个高效的HTTP客户端,它支持HTTP/2和同步/异步请求。...OkHttp就像是一个专业的邮递员,能高效地帮你发送和接收信件。 优点 高效:支持HTTP/2和同步/异步请求,性能出色。 功能强大:支持连接池化、自动重试和恢复、响应缓存等。...Retrofit和OkHttp都支持缓存配置,你可以根据需要设置缓存的大小和策略。
网络缓存机制CacheInterceptor 这里的缓存是指基于Http网络协议的数据缓存策略,侧重点在客户端缓存,所以我们要先来复习一下Http协议如何根据请求和响应头来标识缓存的可用性。...当客户端再次发出网络请求时可比较当前时间 和上次响应的expires时间进行比较,来决定是使用缓存还是发起新的请求。...public 与private相反,public用于标识那些通用的业务数据,比如获取新闻列表,所有人看到的都是同一份数据,因此客户端、代理服务器都可以缓存。...协商缓存 强制缓存最大的问题是,一旦服务端资源有更新,直到缓存时间截止前,客户端无法获取到最新的资源(除非请求时手动添加no-store头),另外大部分情况下服务器的资源无法直接确定缓存失效时间,所以使用对比缓存更灵活一些...OKHttp的缓存实现 上面讲了这么多,实际上OKHttp就是将上述流程用代码实现了一下,即: 第一次拿到响应后根据头信息决定是否缓存。
OkHttp简介 OkHttp作为时下Android最火的Http第三方库可以说被大多数的Android客户端程序所使用,Retrofit底层也是使用OkHttp,与Volley等网络请求框架相比,OkHttp...响应缓存完全避免了重复请求的网络使用。...要设置缓存响应,你需要一个进行读取和写入的缓存目录,以及一个缓存大小的限制。...如添加像Cache-Control:max-stale=3600设置请求头缓存大小,使用Cache-Control:max-age=9600来配置响应缓存时间。...应用拦截器 不需要关心像重定向和重试这样的中间响应; 总是调用一次,即使HTTP响应从缓存中获取服务; 监视应用原始意图。
优化服务器性能:提升服务器处理请求的速度,使用负载均衡技术确保服务器不会过载,使用更快的服务器、优化数据库查询、使用缓存等。 2....缓存策略 缓存是减少网络请求、提高应用响应速度的重要手段: 使用客户端缓存:如磁盘缓存、内存缓存等,可以减少不必要的网络请求。...使用服务器端缓存:如反向代理缓存、数据库缓存等,可以减少服务器的负载,如使用Varnish或Nginx作为反向代理缓存,或在数据库中使用缓存。 3....数据压缩 数据压缩可以减少网络传输的数据量,节省用户的流量: 使用GZIP或Brotli压缩:这两种压缩算法可以有效压缩HTTP响应内容。在服务器端设置使用GZIP或Brotli压缩。...目前Android并不直接支持SDCH,但可以在服务器端使用SDCH,并确保客户端可以处理SDCH压缩。 4.
背景: 服务器端通过接口返回word文档base64编码字符串 客户端需求是缓存预览分享等 处理思路 请求接口下载base64字符串 base64解码转成Data 在 Document创建文件夹,在文件夹下创建文件
在Java中,OkHttp是一个非常流行且功能强大的HTTP客户端库,它提供了简洁的API和高效的性能,广泛应用于各种网络请求场景。...OkHttpClient的基本使用OkHttpClient是一个开源的HTTP客户端库,由Square公司开发。...它支持同步和异步请求,提供丰富的API用于构建HTTP请求,并且内置了许多高级功能,如连接池、缓存响应、自动重试等。...代理服务器的配置在某些情况下,我们可能需要通过代理服务器发送请求,例如访问受限制的网站或隐藏客户端的真实IP地址。...; } }}在上述代码中,我们通过Proxy类创建了一个代理服务器,并将其设置到OkHttpClient.Builder中。这样,所有通过该客户端发送的请求都会经过代理服务器。
HttpClient HttpClient,是一款强大的支持HTTP协议的客户端编程工具包。主要功能在于提供一种有效、最新且功能丰富的方式来执行HTTP请求和响应。...同时,它还具备对HTTPS和代理服务器的支持。这使得HttpClient成为了目前Internet上使用最为广泛且重要的协议之一。...,包括Feign注解和JAX-RS注解2.支持可插拔的HTTP编码器和解码器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)3.支持HTTP请求和响应的压缩4.支持多种客户端:JDK...okHttp的优势: 链接复用 Response 缓存和 Cookie 默认 GZIP 请求失败自动重连 DNS 扩展 Http2/SPDY/WebSocket 协议支持 默认情况下,OKHttp会自动处理常见的网络问题...支持HTTP请求和响应的压缩。
OkHttp 系列文章目录 【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置...】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 ) 【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析...: 内部使用 DiskLruCache 进行缓存 , 根据 url , 请求方法 , 请求头 , 验证是否使用某个缓存 ; ( 只支持 Get 请求的缓存响应方式 ) @Nullable Cache...防止不受信任的证书的攻击行为 , 如果没有受信任的证书 , 报异常 ; CertificatePinner certificatePinner; 身份认证器 : 如果连接提示未授权 , 重新设置请求头响应新的请求...; Authenticator proxyAuthenticator; Authenticator authenticator; 连接池 : 1 个客户端与 1 个服务器之间的连接是 1
请求与缓存.png 三、HTTP缓存机制 1、HTTP报文 HTTP报文就是客户端和服务器之间通信时发送及其响应的数据块。...客户端向服务器请求数据,发送请求(request)报文;服务器向客户端下发返回数据,返回响应(response)报文,报文信息主要分为两部分。...,public表示客户端和服务器都可以缓存) 举个例子。...再次其你去数据时,客户端将备份的缓存标志发送给服务器,服务器根据标志来进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据。...客户端和服务器根据一定的机制(策略CacheStrategy ),在需要的时候使用缓存的数据作为网络响应,节省了时间和宽带。
拦截器主要用来观察,修改以及可能短路的请求输出和响应的回来。通常情况下拦截器用来添加,移除或者转换请求或者响应的头部信息。...cacheCandidate是上次与服务器交互缓存的Response,这里的缓存都是基于Map,key是请求中url的md5,value是在文件中查询到的缓存,页面置换基于LRU算法,我们现在只需要知道它是一个可以读取缓存...这个方法发起刷新请求头部和请求体,解析HTTP响应头部。如果有缓存并且可用则用缓存的数据并更新缓存,否则就用网络请求返回的数据。...如缓存果过期或者强制放弃缓存,在此情况下,缓存策略全部交给服务器判断,客户端只用发送条件get请求即可,如果缓存是有效的,则返回304 Not Modifiled,否则直接返回body。...这里采用了Last-Modified-Date,通过缓存和网络请求响应中的Last-Modified来计算是否是最新数据,如果是则缓存有效。
现在客户端和服务器都准备好了,那么Redis 客户端和服务器如何建立连接?服务器又是如何响应客户端的请求呢? 1 连接服务器 客户端和服务器进行通讯,首先应该就是建立连接。...至此,我们已经跑完客户端与服务器建立连接的全过程。感兴趣的小伙伴可以尝试连接不存在的 IP 或 端口,观察程序抛出异常的时机,熟悉整个连接过程。...客户端与 服务器建立连接后,就可以使用相关命令操作数据库中的 key 了。下面我们以 SET KEY VALUE 命令为例,来看看命令的执行过程。...2 发送命令请求 当用户在客户端键入一个命令请求时,客户端会将这个命令请求按协议格式转换,然后通过连接到服务器的套接字,将转换后的命令请求发送给服务器,如图 3 所示: ?...以上是客户端发送命令给服务器的过程,在下一节中,我们再来认识服务器是如何响应客户端请的。
服务器启动了,客户端也发送命令了。接下来,就要到服务器“表演”的时刻了。 1 服务器处理 服务器读取到命令请求后,会进行一系列的处理。...1.1 读取命令请求 当客户端与服务器之间的套接字因客户端的写入变得可读时,服务器将调用命令请求处理器执行以下操作: 读取套接字中的命令请求,并将其保存到客户端状态的输入缓冲区。...上面的 SET 命令保存到客户端状态的输入缓存区之后,客户端状态如图 4。 ?...如果服务器正在进行数据载入,那么客户端发送是命令必须带有 l 标识才会被服务器执行。...对于我们最开始提的问题,服务器如何响应客户端请求,你有答案了吗? 总结 服务器通过 networking.c/readQueryFromClient() 读取和执行对应命令。
领取专属 10元无门槛券
手把手带您无忧上云