使用适用于Mac OS X 10.9 Mavericks的Safari 7.0(特别是9537.71),我工作的Web应用程序开始通过jQuery对Ajax请求进行间歇性故障。这绝不是我能用Safari 7.0重现的东西。
环境:
请求详细信息:
ajax:beforeSend
UJS事件are here的设置。请求失败时触发了ajax:error
UJS事件。错误消息为SyntaxError: JSON Parse error: Unexpected EOF
。 XHR的准备状态为4
,响应为空,状态为200
。有indication这是由于浏览器拒绝了请求,因为它不符合同源策略。这与我在服务器端看到的一致 - 没什么。没有遇到遇到此错误的客户端IP的匹配请求; AJAX请求从未进入服务器。与此相关的同源策略的观点相反,这些请求是相对于主机(/some/url
)进行的,因此绝对不应该失败同源策略测试&不应受跨域规则的约束。此外,如果这与跨域问题有关,则会出现一致的失败。有趣的是,对于某些用户来说,这似乎是一致的,但是有些用户会重新尝试并且事情会在以后正常运行。
此问题发生在使用此特定版本的Safari的约30%(球场)请求中。它从未发生在任何其他浏览器上。这是应用程序的一个非常关键的部分,所以我一直在尝试一些解决方法,我假设是一个浏览器错误,但尚未找到任何关于此类问题的报告。
尝试修复但没有成功:
这些尝试修复没有改变任何内容。
此外,在诊断此问题时,我使用基本的AJAX请求将错误发布回服务器,并更好地报告正在发生的事情。我注意到其中一些请求也失败了(部分错误报告仍然有助于排除故障)。总的来说,它似乎与Rails,jQuery或UJS没有任何直接关系。
最后,我今天将请求切换为使用JSONP,并且非常成功。有一次失败,但失败可能是出于其他原因(仍在调查中)。
我的问题:
我也会向WebKit小组提交错误报告,但是想在这里询问以防万一有任何想法。
答案 0 :(得分:0)
将我的网络服务器从Lighttpd 1.4.26 更新为 1.4.33 解决了这个问题。
问题似乎出现在网络服务器上。我不知道它是否是服务器中的错误(我没有找到任何报告),但我能够通过运行最小配置并发送 POST 请求来重现该问题它。来自表单的简单 POST 请求无法正确地通过Web服务器。
这是我正在运行的安装:
Ubuntu 10.04.4 LTS (lucid)
lighttpd/1.4.26 (ssl) - a light and fast webserver
Build-Date: Dec 20 2011 14:45:35
Event Handlers:
+ select (generic)
+ poll (Unix)
+ rt-signals (Linux 2.4+)
+ epoll (Linux 2.6)
- /dev/poll (Solaris)
- kqueue (FreeBSD)
Network handler:
+ sendfile
Features:
+ IPv6 support
+ zlib support
+ bzip2 support
+ crypt support
+ SSL Support
+ PCRE support
+ mySQL support
+ LDAP support
+ memcached support
+ FAM support
+ LUA support
+ xml support
+ SQLite support
+ GDBM support
在构建新版本的Lighttpd之后,我正在运行:
lighttpd/1.4.33 (ssl) - a light and fast webserver
Build-Date: Dec 8 2013 14:06:46
Event Handlers:
+ select (generic)
+ poll (Unix)
- rt-signals (Linux 2.4+)
+ epoll (Linux 2.6)
- /dev/poll (Solaris)
- eventports (Solaris)
- kqueue (FreeBSD)
- libev (generic)
Network handler:
+ linux-sendfile
- freebsd-sendfile
- solaris-sendfilev
+ writev
+ write
- mmap support
Features:
+ IPv6 support
+ zlib support
+ bzip2 support
+ crypt support
+ SSL Support
+ PCRE support
- mySQL support
- LDAP support
- memcached support
- FAM support
- LUA support
- xml support
- SQLite support
- GDBM support
也许这会为其他人节省一些时间,但可能没有很多人仍在运行这个老版本的Lighttpd。