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

时间:2013-12-06 19:41:18

标签: javascript macos xmlhttprequest cors

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

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

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

    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();
    

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

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

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

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

    我认为在“localhost”或“127.0.0.1”上运行服务器或客户端可能会出现问题,但我也使用相同结果的主机名运行。

    没有涉及SSL,一切都是通过HTTP清晰的。

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

1 个答案:

答案 0 :(得分:6)

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

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

请注意:Computer Blocking CORS OPTIONS Request我卸载了它,现在一切正常。

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

<强>更新

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

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