是否有人在经过身份验证的HTTPS连接上成功使用了OkHttpResponseCache?我面对这种奇怪的行为,第二次从缓存中提供内容,它返回垃圾而不是正确的内容。
我使用的服务作为示例受HTTP基本身份验证保护,并通过HTTPS访问。我添加了must-revalidate响应头以允许缓存存储响应。它使用ETag作为缓存验证的机制。
它适用于第一个缓存的响应:
1 - 第一次拨打服务电话,服务器返回200 OK。调试响应缓存源代码如果传递给put()方法(将其存储在文件存储中),我可以看到响应。
2 - 发出第二个请求。服务器被命中并返回304响应。检查缓存标头和步骤调试确认我确实服务器确实返回304.一个奇怪的行为很难:在第二个响应(现在由缓存服务)上,ETag标头现在包含重复的值(而不是具有单个值,它在列表中有两次这个值。)
3 - 我提出第三个请求。与上述相同的行为,相同的"重复" ETag值,但当我得到输入流,而不是正确的json文本,我得到垃圾(就像在一堆黑色钻石里面有一个审讯)。
我不知道我做错了什么(配置缓存时)。我不知道这是否是编码问题,或者缓存是否尝试更新文件存储并使输入搞乱。我怀疑在第一次缓存响应之后(在第二次尝试中)第二个ETag值的存在使标头无效,并且缓存尝试再次存储响应并结束搞乱它。我无法通过它进行调试以确认。
我试图"翻译" UTF-8,16,ASCII,ISO的垃圾文本无济于事。我尝试使用HTTP而不是HTTPS并获得相同的行为。
有人遇到类似的东西并且能够解决它吗?它是缓存中的错误还是我做错了什么?
答案 0 :(得分:0)
在执行条件GET时,OkHttp更新Content-Encoding: gzip
标头的方式存在错误。它已在OkHttp 1.3中修复。