CORS Preflight 403,但我有正确的标题

Posted

技术标签:

【中文标题】CORS Preflight 403,但我有正确的标题【英文标题】:CORS Preflight 403, but I have proper header 【发布时间】:2019-02-02 09:56:04 【问题描述】:

开发一个调用网络服务器上的 api 以进行数据库交互的 ionic 应用程序。我以前做过一次,并从该项目中复制了代码,但它不起作用。

这是我在 php 网络服务器上的标头:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept");
header("Access-Control-Expose-Headers: Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");

这是我尝试从应用程序启动 POST 时遇到的错误:

Cross-Origin Read Blocking (CORB) blocked cross-origin response <url remove by me> with MIME type text/html.
Failed to load <url removed by me>: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

状态码是403 Forbidden

为了让前一个项目的标头工作,花了一些时间,而且这些是同一组标头。这次它托管在不同的服务器上,但我不确定这对 CORS 是否有任何影响。该文件存在,这是它的正确路径。如果我直接导​​航到 api 页面,标题会显示 Access-Control-Allow-Origin *... 但试图从应用程序中获取它是行不通的。

感谢任何帮助。 CORS 可能会很痛苦。

【问题讨论】:

您使用的是 PHP 框架吗?比如 Laravel? @fransyozef 我不是。就直接纯php。 【参考方案1】:

感谢您昨天的所有建议,我终于弄清楚它是什么了。在响应似乎没有任何改变或改变之后,我联系了托管公司。结果他们在最低托管层阻止了 OPTIONS 请求。

因此,如果其他人遇到这种情况,请联系您的托管公司,看看它是否已经结束。

【讨论】:

【参考方案2】:

预检请求不能包含 cookie 或其他常见的身份验证标头,并且必须接收 200 OK 响应。

您的服务器正在响应403 Forbidden。您需要从要授权的要求中排除 OPTIONS 请求。

如果我直接导​​航到 api 页面

...那么您发出的是 GET 请求,而不是预检 OPTIONS 请求。

【讨论】:

是的,我查了预检的要求。最初我遇到了位置问题并修复了该问题(url 中缺少 www)。我目前没有对 API 进行任何授权。这是我传入的标题之一,还是我需要对请求方法进行某种测试,并且基本上只为“OPTIONS”返回任何内容?直接导航到页面,是的......只是测试标题是否甚至在那里。 "我目前没有对 API 进行任何授权。" — Something 导致服务器以 403 Forbidden 响应进行响应。如果你上面没有任何 authn/authz,那么你需要找出那是什么。 “我是否需要对请求方法进行某种测试,并且基本上只为“OPTIONS”返回任何内容”——除了 CORS 权限标头之外什么都没有。

以上是关于CORS Preflight 403,但我有正确的标题的主要内容,如果未能解决你的问题,请参考以下文章

Web Api 2 Preflight CORS 请求承载令牌

Express 服务器和 Axios CORS Preflight 响应不成功

对 CORS preflight OPTIONS 请求的响应是 Laravel API 中的 500 Internal Server Error

CORS preflight OPTIONS 请求从 Windows Authenticated web api 返回 401(未授权)

[CORS][Spring Security] PreFlight 请求未处理

来自 Django 服务器的 reactjs 请求时出错(403 错误/CORS)