OkHttp Request returns 缓存结果,针对不同的 X Auth Tokens
OkHttp Request returns cached result, for different X Auth Tokens
我正在开发一个 Android 应用程序,我在其中使用 Retrofit 与其他 API 进行通信。
此 API 提供了一个登录名,以获取 X Auth Tokens。
我有一个拦截器来为每个这样的请求设置这个令牌:
@Override
public void intercept(RequestFacade request) {
request.addHeader("X-Auth-SOFTTOKEN", softToken);
request.addHeader("X-Auth-HARDTOKEN", hardToken);
request.addHeader("X-Auth-USER", username);
}
我可以观察到一个奇怪的行为,我得到了旧用户的缓存响应,尽管 X 授权令牌不同,我应该得到新登录用户的响应。
如果我将这段代码添加到我的其余 API 接口方法中,它就可以工作。
@Headers("Cache-Control: no-cache")
我找不到任何提示这是否是预期的行为。我认为如果请求完全相同,缓存应该只被触发。
看看这个答案:https://whosebug.com/a/35993722/3964585 and from there also http RFC - https://www.rfc-editor.org/rfc/rfc7231#section-7.1.4
简而言之 - 当服务器使用“Vary”header 指示时,缓存必须考虑 headers。服务器的替代方法是使用 Cache-control header 指令。
在您的案例中,服务器似乎返回了不正确的响应。如果可以,请修复它,如果不能,则不能使用 http 缓存。
我正在开发一个 Android 应用程序,我在其中使用 Retrofit 与其他 API 进行通信。 此 API 提供了一个登录名,以获取 X Auth Tokens。 我有一个拦截器来为每个这样的请求设置这个令牌:
@Override
public void intercept(RequestFacade request) {
request.addHeader("X-Auth-SOFTTOKEN", softToken);
request.addHeader("X-Auth-HARDTOKEN", hardToken);
request.addHeader("X-Auth-USER", username);
}
我可以观察到一个奇怪的行为,我得到了旧用户的缓存响应,尽管 X 授权令牌不同,我应该得到新登录用户的响应。
如果我将这段代码添加到我的其余 API 接口方法中,它就可以工作。
@Headers("Cache-Control: no-cache")
我找不到任何提示这是否是预期的行为。我认为如果请求完全相同,缓存应该只被触发。
看看这个答案:https://whosebug.com/a/35993722/3964585 and from there also http RFC - https://www.rfc-editor.org/rfc/rfc7231#section-7.1.4
简而言之 - 当服务器使用“Vary”header 指示时,缓存必须考虑 headers。服务器的替代方法是使用 Cache-control header 指令。
在您的案例中,服务器似乎返回了不正确的响应。如果可以,请修复它,如果不能,则不能使用 http 缓存。