改造 - 不同设备上的不同 API 响应
Posted
技术标签:
【中文标题】改造 - 不同设备上的不同 API 响应【英文标题】:Retrofit - Different API responses on different devices 【发布时间】:2018-07-10 14:17:09 【问题描述】:问题与以下完全一样 我有一个可以提供一些数据的api和一个apk,
我的设备得到了我的 api 响应,而模拟器上使用相同的 apk 得到了另一个不同的旧响应!
模拟器响应是最新更改的最新响应,而另一个不同的响应是更改之前的响应。
该应用程序使用没有缓存的改造。 那么可能是什么问题呢?
请求仅包含一个标头(访问令牌) 响应包含 (ETag, Access-Control-Max-Age) 之类的标头,但改造不应处理它们,因为根本没有缓存。
邮递员截图:
同时等待一段时间后,所有设备都会更新!
【问题讨论】:
你应该检查两个客户端之间的HTTP请求内容,主要检查HTTP头。 如 sakiM 所说,分享您的请求和标头。 @sakiM 发送的请求只有一个标头(访问令牌),并且响应包含诸如 (ETag, Access-Control-Max-Age) 之类的标头,但应用程序不应将它们处理为根本没有缓存,问题出在哪里? @azizbekian 请检查添加的标题 请验证您是否收到预期的回复,例如使用Postman。 【参考方案1】:你确定吗?
应用使用改造而不缓存
基于这个https://github.com/square/retrofit/issues/678,我认为改造(改造中的OkHttp)缓存了你的查询。
您可以通过 2 种方式更改此行为:
将 ?_t=TIMESTAMP 添加到您的应用查询网址中 从您的服务器响应中删除“Access-Control-Max-Age”标头【讨论】:
感谢您的帮助,但添加 ?_t=TIMESTAMP 不起作用,我将尝试第二个选项并返回【参考方案2】:或者你可以创建新的 OkHttp 客户端来改造和编写类似的东西:
new OkHttpClient.Builder().cache(null).build();
或
Request.cacheControl(CacheControl.FORCE_NETWORK)
【讨论】:
感谢您的帮助,但我已经使用了第一个解决方案和空缓存对象,第二个解决方案给了我相同的结果 酷,很高兴能帮到你)【参考方案3】:那么可能是什么问题?
如果你没有在客户端发现问题,你应该在服务器端寻找它。任何类型的缓存(在数据库上,或在 HTTP 响应级别上)都可以显示这种行为。
如果不进一步了解您的设置和测试环境,就不可能找出问题所在。你写
另外,在等待一段时间后,所有设备都会更新
这是什么意思?您如何确定您的设备是否是最新的?
在您的复杂情况下,涉及后端,您应该在 Github 上提供一个示例项目,可以重现此行为。
【讨论】:
以上是关于改造 - 不同设备上的不同 API 响应的主要内容,如果未能解决你的问题,请参考以下文章