我在我办公室的另一台机器上运行了一个非常简单的启用CORS的Node.js Web服务器。我将它设置为在端口8080上运行。
如果我发送它作为初始请求,触发预检(例如内容类型application/json
的请求),它将失败,但仅在非常特定的条件下:
以下是我用来发送请求的代码:
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浏览器?
答案 0 :(得分:6)
找到了我自己的问题的答案。
适用于Mac的Cisco AnyConnect客户端似乎会导致CORS请求出现问题。
请注意:Computer Blocking CORS OPTIONS Request我卸载了它,现在一切正常。
关于我的问题的评论者是关于它的,但我没有怀疑VPN软件会导致这类问题,因为它是,你知道,没有运行。
<强>更新强>
显然,在没有 Web Security 模块的情况下重新安装它将解决问题。