计算机阻止 CORS 选项请求

Posted

技术标签:

【中文标题】计算机阻止 CORS 选项请求【英文标题】:Computer Blocking CORS OPTIONS Request 【发布时间】:2013-12-07 10:11:39 【问题描述】:

这快把我逼疯了!我正在尝试处理 Amazon S3 CORS 请求,但它们无法在我的计算机上运行。看来我的计算机正在阻止或忽略 OPTIONS 请求。如果我从终端运行 CURL 命令:

curl -i -X OPTIONS http://testing.bennadel.com.s3.amazonaws.com

...我明白了:

curl: (52) 来自服务器的空回复

但是,如果我在 same 路由器上的另一台计算机(AirBook)上运行 same 请求,我会得到预期的响应(XML 格式):

信息不足。需要源请求标头。

我尝试过刷新我的 dsn 缓存(通过 dscacheutil)。我尝试将我的 DNS 更改为使用 Google 的公共 DNS。我试过重新启动我的电脑。没有运气!这台计算机一直阻止 OPTIONS 请求,而我尝试的所有其他计算机都允许它。

建议?这台计算机 (iMac) 正在通过 WiFi 连接到我的路由器;但是,发出成功的 OPTIONS 请求的 AirBook 也是如此。

另外请注意,对同一 URL 的非 OPTIONS 请求可以正常工作(即 GET)。

【问题讨论】:

防火墙/代理设置?检查您的日志 (Console.app) 以获取防火墙消息。尝试数据包捕获(tcpdump 或 Wireshark)以查看实际通过线路输出的内容(如果有的话)(以及空响应的来源)。 在 Console.app 上的好想法(我不习惯在这个级别调试东西)。看起来每当我尝试执行 OPTIONS HTTP 请求时,都会在控制台中显示:11/22/13 10:18:17.967 AM acwebsecagent[294]: Connection : Auth key is not provided or is invalid, apply connection failure政策。 CMode : 0 TMode : 0 一些谷歌搜索说这个错误可能与我安装的“Cisco AnyConnect”有关(对于 *** 要求)。来自 Apple 支持:discussions.apple.com/thread/3507331 卸载“Cisco AnyConnect”帮我解决了这个问题!请注意,您已完全卸载它。只是禁用它不起作用。 我的几个同事遇到了这个问题,这也是 Cisco AnyConnect 问题; @user3021922 你介意用它回答你自己的问题并将其标记为正确答案吗?我差点没看到这些cmets。 【参考方案1】:

更具体地说,问题似乎出在 AnyConnect 的网络安全模块中。我可以通过卸载并重新安装 AnyConnect 并取消选中网络安全选项来解决此问题;或者,只需运行 websecurity_uninstall.sh 脚本。 (这适用于 AnyConnect 3.1.04074。)

感谢@user3021922 和其他人发现问题 - 这也让我发疯了。

【讨论】:

遇到了同样的问题,运行websecurity_uninstall.sh 修复了它(它在/opt/cisco/anyconnect/bin/websecurity_uninstall.sh 中,至少在我的OS X 10.10 上)。 使用了 GUI 卸载,但也对我有用。实际上,在我尝试上传文件之前,任何对我都有效的请求(GET/POST/whatever)都被我机器上的这个模块完全阻止了。【参考方案2】:

问题在于 Cisco AnyConnect 的网络安全模块。在我们的案例中,我们无法卸载 AnyConnect 或对其进行任何更改(大型企业设置,更改将非常昂贵/耗时)。幸运的是,似乎有两种可行的解决方案。

    Cisco 仅阻止端口 808080(其他端口似乎没问题)。 思科允许安全的https 请求。

因此,如果您可以控制服务器,请将其放在不同的端口或使用 https,您的用户会没事的。

【讨论】:

以上是关于计算机阻止 CORS 选项请求的主要内容,如果未能解决你的问题,请参考以下文章

Angular CORS 请求被阻止

跨域请求仅在 Firefox 中被阻止! [选项:403 禁止]

CORS 原始请求被阻止 - 我可以从客户端做啥? [复制]

CORS 策略已阻止访问 XMLHttpRequest - Laravel 5.8

CORS 选项预检悬挂

请求被 CORS 策略阻止