当前位置: 首页 > 知识库问答 >
问题:

在okhttp中,我希望处理last-modified和ETags,但不缓存整个响应

端木震博
2023-03-14

我正在使用okhttp和Registfit调用REST服务。从服务返回数据存储在我的Android应用程序中的sqlite数据库中。

共有1个答案

澹台鸿光
2023-03-14

要知道您是否得到了304 as响应,可以在onResponse回调中捕获它,如下所示:

if (response.raw().networkResponse().code() == 304){
    // Do what you want to do
}

至少,这是当您使用Registfit2和okHttp 3时。不确定早期版本,但我想它会是一样的?在响应中设置断点时,您总是可以尝试找到304响应。

 类似资料:
  • 11.6. 处理 Last-Modified 和 ETag 既然你知道如何在你的 web 服务请求中添加自定义的 HTTP 头信息, 接下来看看添加 Last-Modified 和 ETag 头信息的支持。 下面的这些例子将以调试标记置为关闭的状态来显示输出结果。 如果你还停留在上一部分的开启状态, 可以使用 httplib.HTTPConnection.debuglevel = 0 将其设置为关

  • 我还没有完全理解.NETMVC的HTTP缓存是如何工作的,因为它看起来并不像是在实际检索缓存的资源文件。我想我需要在某处添加一些额外的代码。。。 首先,让我们看看我是如何在静态内容(即图像)上设置HTTP缓存的。在我的网络中。config,我有以下内容: 这会导致我的应用程序中的图像看起来缓存正确。当我查看图像的响应标头时,我看到以下内容(删除了不必要的标头): 我看到一个很好的ETag值,我的过

  • Last-Modified响应HTTP报头包含在其原始服务器认为该资源的最后修改日期和时间。它被用作验证器来确定接收或存储的资源是否相同。不如ETag标题准确,它是一种回退机制。包含条件请求If-Modified-Since或If-Unmodified-Since标题使用此字段。 Header type Response header Forbidden header name no CORS-s

  • 控制器能处理带有'Cache-Control'、'ETag'及/或'If-Modified-Since'头的请求,如果服务端在响应中设置了'Cache-Control'响应头,那么我们推荐在控制器内对这些请求头进行处理。这涉及一些工作:计算最后更改时间long和/或请求的ETag值、与请求头的'If-Modified-Since'值做比较,并且在资源未更改的情况下在响应中返回一个304(资源未更改

  • 扫描仪sc=新扫描仪(系统输入);字符串A=sc.nextLine();

  • 我有一个简单的用例,服务器为请求返回Etag,并将该Etag作为标头(即)添加到所有后续url请求。如果响应中有变化,服务器可以用响应,否则可以用响应。对于后者,重用缓存中的响应是有意义的。但是okhttp总是返回作为缓存响应。 我做了一些故障排除,okhttp在内部将响应写入磁盘,但是不会将其返回到。仔细研究类,有一些文档明确说明不会使用缓存: 编辑-更正,Okhttp正确地添加了etag标头。