为什么Chrome for iOS插入图像/webp内容类型

Why does Chrome for iOS insert image/webp content-type?

本文关键字:webp 类型 图像 Chrome for iOS 插入 为什么      更新时间:2023-09-26

我有一个移动web应用程序,正在通过$.get()进行AJAX请求。对于Safari iOS,请求成功,但对于Chrome iOS,请求失败,状态为0,状态文本为"error"。

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

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

Chrome for iOS增加了一个mime类型"image/webp"到传出的Accept: header和返回的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已将请求发送到谷歌代理服务器以服务请求(info https://support.google.com/chrome/answer/3517349?hl=en)。似乎这个代理服务器正在设置额外的内容类型,并且不知何故内容类型返回为图像/webp的方式?服务器端代码是RESTful Spring 3;我确实在控制器代码中将内容类型设置为"text/plain",但不知何故,这没有被采取,它仍然返回为"image/webp"。

有没有人遇到过类似的问题并找到了解决方案?我需要有一个返回内容类型的"文本/纯",让数据正确返回到我的应用程序。这个请求在Chrome for Android上也能正常工作,AFAIK,还没有做tcpdump,但应用程序工作正常;

我们遇到了同样的问题:Chrome for iOS更喜欢webp,所以它发送的标题为Accepts: image/webp, */*;q=0.8。实现这一改变的人显然没有考虑到影响,所以这导致相当多的API返回一个415

更多信息请参见:https://code.google.com/p/chromium/issues/detail?id=169182

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