Mac浏览器似乎吞下了初始的CORS XHR预检请求

mWi*_*lis 6 javascript macos xmlhttprequest cors

我有一个非常简单的启用CORS的Node.js Web服务器在我办公室的另一台机器上运行.我设置它在端口8080上运行.

如果我发送它作为初始请求,触发预检(例如具有内容类型的请求application/json),它将失败,但仅在非常特定的条件下:

  1. 服务器在端口80或8080上运行.任何其他端口工作正常.
  2. 我正在从Mac发送请求(OS X 10.8.5).无论我是在本地计算机上运行服务器还是在单独的Windows计算机上运行,​​都会产生相同的效果.如果我在我的Mac上运行服务器并从我的Windows机器发出请求,它可以正常工作.

这是我用来发送请求的代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://myserver.domain.com'); // NOT the real URL of course...
xhr.setRequestHeader('Content-Type', 'application/json'); // Triggers the preflight OPTIONS request.
xhr.send();
Run Code Online (Sandbox Code Playgroud)

非常简单.没有花里胡哨,但出于某种原因,如果我在Mac上运行该请求,浏览器似乎会在发送之前吞下OPTIONS请求.我没有收到服务器收到的任何迹象,浏览器控制台显示(相对无用)错误.所有三种主要浏览器(Chrome,Safari和Firefox)都显示相同的行为.

其他拥有类似Mac的同事也尝试了相同的结果,因此它似乎并不特定于我的机器.

我认为这可能是我的服务器的一个问题,因为我对一个着名的CORS启用的API服务器(即api.github.com)尝试了同样的方法,并且工作得很好.但是,我在本地针对2个完全不同的服务器应用程序运行它,结果相同.

CORS响应头看起来很好 - 正如我所说,如果我从Windows浏览器发送请求,它的工作正常.此外,如果我最初发送非预先请求的请求,后续的预检请求也可以正常工作.

我认为在"localhost"或"127.0.0.1"上运行服务器或客户端可能是一个问题,但我也使用它们的主机名运行两个结果相同.

没有涉及SSL,一切都是通过HTTP明文.

有没有人见过这种行为,特定于Mac浏览器?

mWi*_*lis 6

找到了我自己的问题的答案.

适用于Mac的Cisco AnyConnect客户端似乎会导致CORS请求出现问题.

由此提示:计算机阻止CORS选项请求我卸载它,现在一切正常.

关于我的问题的评论者,但我没有怀疑VPN软件会导致这种问题,因为它是,你知道,没有运行.

UPDATE

显然,在没有Web Security模块的情况下重新安装它将解决问题.

http://www.bennadel.com/blog/2559-Cisco-AnyConnect-VPN-Client-May-Block-CORS-AJAX-OPTIONS-Requests.htm

  • 非常感谢。我一直在打猎,但没想到会是 cisco。谢谢 mWillis (2认同)