我有一个移动网络应用程序通过$ .get()发出AJAX请求。 Safari iOS的请求成功,但状态为0和状态为#34的Chrome for iOS失败;错误"。
在我的服务器上使用tcpdump,我可以看到Safari发送/接收以下标题:
Accept: */* (outgoing)
Content-Type: text/plain;charset=ISO-8859-1 (returning)
Chrome for iOS添加了mime类型" image / webp"传出的Accept:标题和返回的Content-Type是" image / webp":
Accept: */*,image/webp (outgoing)
HTTP/1.1 200 OK
Content-Type: image/webp (returning)
通过jQuery代码阅读,看起来$ .get()只解析AJAX响应中的某些内容类型,所以我认为图像mime类型只是被拒绝,导致"错误"状态。
在Chrome for iOS的请求到达我的服务器时,还有这个标题:
Via:1.1 Chrome-Compression-Proxy
...表示Chrome for iOS已将请求发送到Google代理服务器以处理请求(信息https://support.google.com/chrome/answer/3517349?hl=en)。好像这个代理服务器正在设置额外的内容类型,并且在回来的路上以某种方式将内容类型作为image / webp返回?服务器代码是RESTful Spring 3;我将内容类型设置为" text / plain"在控制器代码中,但不知何故没有采取它仍然返回" image / webp"。
是否有人遇到类似问题并找到解决方案?我需要返回" text / plain"的内容类型。将数据正确地恢复到我的应用程序。此请求在适用于Android的Chrome以及AFAIK上正常运行,尚未为此完成tcpdump,但该应用正常运行;仅适用于Chrome for iOS。
答案 0 :(得分:3)
我们遇到了同样的问题:Chrome for iOS更喜欢webp,因此它将标题发送为Accepts: image/webp, */*;q=0.8
。实施这一变化的人显然从未考虑过这种影响,因此这导致了相当多的API返回415
有关详细信息,请参阅:https://code.google.com/p/chromium/issues/detail?id=169182
最后我们修改了服务器本身,因为它会返回415.在响应方面,它应该一切顺利。