1

当请求通过一个或多个重定向跃点时,我在缓存响应上使用带有条件 GET 的 Volley 时遇到问题。

在初始请求中,如果服务器以 302 响应,则 HTTP 堆栈(我使用默认的 HurlStack)透明地遵循重定向并最终返回来自最终服务器的响应。

在随后的请求中,Volley 添加了一个 If-Modified-Since 标头来执行条件 GET,但这些请求会发送到初始服务器,因此我们不会重定向,而是只收到 304 响应,并且请求永远不会到达最终服务器。

由于 Volley 与其底层 HTTP 堆栈的耦合非常松散,因此无法传达缓存标头仅应与最终请求一起发送的事实。

我能看到的最佳解决方案(除了从不发送条件 GET 之外)是编写一个自定义 HttpUrlConnection 实现,该实现识别某些标头属于特定 URL,并且仅在适当时发送这些标头。这意味着,我必须将最终服务器的 URL 保存在某个地方,可能作为自定义标头,以便它与其他标头一起保存在缓存中。

一个稍微不那么 hacky 的解决方案是编写一个手动处理重定向的自定义 HttpStack 实现。但这意味着我们不能重用连接来重定向到同一主机,因此效率会降低。

有没有其他人遇到这个问题并有更好的解决方案?它似乎不是特定于 Volley 或 HttpUrlConnection,而是特定于任何透明处理重定向的 HTTP 库。你如何告诉它哪些标题与给定的 URL 一起使用?

4

0 回答 0