摘要:Safari报告304响应,即使它在XHR请求上收到200响应
你好 - 我和Safari有一个奇怪的情况,并且已经到了试图自己研究它的路的尽头,我希望有人在这里遇到过这个问题.
我目前开始在Safari中使用我的应用程序(一个厚厚的Sencha Touch客户端与NodeJS提供的RESTful API交谈)并注意到浏览器偶尔(实际上是:大约5次中有6次)错误处理服务器响应并报告它们(在开发人员工具网络控制台中)作为没有内容的304响应,而不是实际传递的具有JSON内容的200个响应.(并且应用程序正在相应地运行 - 无内容304响应导致应用程序假设它没有数据,并且它以这种方式响应,因此它不仅仅是开发人员面板中的装饰问题.)
标题甚至不正确 - 这里是两个案例的Safari报告的不相交的响应头集合(我已经确认请求内容和标题对于两者是相同的):
200
- 访问控制允许的凭据:真
- 访问控制允许报头:*
- 访问控制允许的方法:GET,POST,UPDATE,DELETE,OPTIONS
- 访问控制允许来源:未定义
- 内容长度:2
- 内容类型:应用/ JSON; 字符集= utf-8的
304
- 内容类型:text/JavaScript的
- 最后修改时间:2011年11月20日星期日格林威治标准时间22:30:45
- 服务器:lightnode
- 传输编码:身份
(我省略了两者之间相同的响应头.)
其他几点说明
- 我已经验证了服务器发送的响应在每个请求中是相同的,并且已经tcpdump了流量并确认服务器正在发送200个响应代码(和标头),然后由Safari报告和处理304响应sans内容(以及上面的虚假标题.)Safari正在报告从未发送的响应.
- 上面的304标题看起来类似于此应用程序中可能与静态内容一起发送的内容,但我已确认两个响应都由相同的代码路径提供(API服务器,即没有涉及"lightnode",这些标头是由Safari组成.)
- 我在Chrome中看不到这种行为
- 我已经在Mobile Safari上确认了相同的错误应用程序行为(为其构建了Sencha Touch,以及所有其他WebKit浏览器,如Safari和Chrome),但由于iOS不能,因此无法确认伪造的响应处理真正暴露这种低级调试信息.
- 这里没有XSS/CORS问题,API和静态内容都来自同一个域.
- 是的,我已经完成了所有通常的清除cookie /缓存/重启/等初始化的东西,没有任何效果.
版本