javascript - 为什么 Chrome for iOS 会插入 image/webp content-type?

标签 javascript ios google-chrome mobile webp

我有一个移动网络应用程序,它通过 $.get() 发出 AJAX 请求。 Safari iOS 的请求成功,但 Chrome for iOS 的请求失败,状态为 0 且状态文本为“错误”。

在我的服务器上使用 tcpdump,我可以看到 Safari 发送/接收以下 header :

Accept: */*    (outgoing)

Content-Type: text/plain;charset=ISO-8859-1    (returning)

iOS 版 Chrome 向传出的 Accept: header 添加了“image/webp”的 mime 类型,返回的 Content-Type 是“image/webp”:

Accept: */*,image/webp  (outgoing)

HTTP/1.1 200 OK
Content-Type: image/webp   (returning)

通读 jQuery 代码,看起来 $.get() 只解析 AJAX 响应中的某些内容类型,所以我认为图像 mime 类型只是被拒绝,导致“错误”状态。

在来自 iOS 版 Chrome 的请求到达我的服务器时,还有这个 header :

通过:1.1 Chrome-Compression-Proxy

...这表明 Chrome for iOS 已将请求发送到 Google 代理服务器以服务该请求(信息 https://support.google.com/chrome/answer/3517349?hl=en)。好像这个代理服务器正在设置额外的内容类型,并且在返回的路上以某种方式返回内容类型作为 image/webp?服务器代码是 RESTful Spring 3;我确实在 Controller 代码中将内容类型设置为“text/plain”,但不知何故,它没有被采用,它仍然作为“image/webp”返回。

有没有人遇到过类似的问题并找到了解决方案?我需要返回 Content-Type 为“text/plain”才能将数据正确返回到我的应用程序。此请求在 Android 版 Chrome 和 AFAIK 上均能正常工作,尚未为此执行 tcpdump,但该应用程序可正常工作;仅在 iOS 版 Chrome 上失败。

最佳答案

我们遇到了同样的问题:iOS 版 Chrome 更喜欢 webp,因此它发送其 header 作为 Accepts: image/webp, */*;q=0.8。实现该更改的人员显然从未考虑过影响,因此这导致相当多的 API 返回 415

有关详细信息,请参阅:https://code.google.com/p/chromium/issues/detail?id=169182

最后我们修改了服务器本身,因为它会返回 415。在响应端,它应该一切顺利。

关于javascript - 为什么 Chrome for iOS 会插入 image/webp content-type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32287347/

相关文章:

ios - 如何设置 UIPickerView 的默认值

ios - 在片段着色器中优化 GLSL 代码 (iOS 5 + OpenGL ES 2.0)

google-chrome - 在 Chrome 中通过链接突出显示文本

ios - 在 xamarin 的钥匙串(keychain)中找不到有效的 iPhone 代码签名 key

javascript - 向浏览器请求模态以选择证书

android - 没有重定向的 WebView 回溯历史

javascript - Vue.js:子组件如何改变父组件的状态?

javascript - 谷歌 "change background image"链接如何工作?

javascript - 我试图在 javascript 中创建带有时间属性的东西,但它不起作用

javascript - 我可以将 jstree 复选框限制为只有有 child 的 parent 吗?