当我使用OkHttp从这样的URL中获取JSON:
Request request = new Request.Builder()
.url(url).build();
我通常会得到相同的回复(有时候我会得到新回复)。
如果我这样使用:
Request request = new Request.Builder()
.cacheControl(new CacheControl.Builder().noCache().noStore().build())
.url(url).build();
我每次都会收到新的回复。
我想知道为什么我会通过第一种方法获得相同的响应?
答案 0 :(得分:1)
在HTTP中缓存
HTTP通常用于分布式信息系统,通过使用响应缓存可以提高性能。 HTTP / 1.1协议包括许多旨在尽可能使缓存工作的元素。因为这些元素与协议的其他方面不可分割,并且因为它们彼此交互,所以与方法,标题,响应代码等的详细描述分开描述HTTP的基本缓存设计是有用的。
如果没有显着提高性能,缓存将毫无用处。在HTTP / 1.1中缓存的目的是在许多情况下消除发送请求的需要,并且在许多其他情况下无需发送完整响应。前者减少了许多操作所需的网络往返次数;我们使用"到期"为此目的的机制。后者降低了网络带宽要求。
有关详细信息,请浏览Caching in HTTP。另外,有关编码方面的帮助,请参阅Class Cache上的此文档。