改造 - 不同设备上的不同 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 响应的主要内容,如果未能解决你的问题,请参考以下文章

BLE在不同设备上的不同外设名称

不同设备上的相同网站?

不同 API 上的奇怪自定义 SeekBar 可绘制行为

如何从包含android中API响应的缓存中获取改造缓存数据

响应式web-媒体查询

基于不同设备下的响应式布局的原理