CORS 策略已阻止从源“localhost”访问“localhost”处的 XMLHttpRequest:对预检的响应 [关闭]

Posted

技术标签:

【中文标题】CORS 策略已阻止从源“localhost”访问“localhost”处的 XMLHttpRequest:对预检的响应 [关闭]【英文标题】:Access to XMLHttpRequest at 'localhost' from origin 'localhost' has been blocked by CORS policy: Response to preflight [closed] 【发布时间】:2020-06-24 06:25:43 【问题描述】:

我收到以下错误:

Access to XMLHttpRequest at 'https://localhost:44355/Brand' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

我已经尝试了解决方案 here,但没有一个对我有用 - Chrome 插件的链接似乎不起作用。我没有尝试在 Chrome 中禁用 CORS,因为这并不是我真正想要的解决方案。

我正在从 React 生成一个 GET:

axios
.get<BrandResponse>(url, 
  'headers':  'Authorization': 'Bearer ' + me.props.session.credentials.accessToken  )
        .then((response: AxiosResponse<BrandResponse>) ...

我的服务器是一个 dotnet core MVC 应用程序。我的控制器如下所示:

[Authorize]
[ApiController]
[Route("[controller]")]
public class BrandController : BaseController

    ...

    [HttpGet]
    [ProducesResponseType(StatusCodes.Status202Accepted, Type = typeof(BrandResponse))]
    public async Task<ActionResult> SearchLcationsAsync([FromQuery] QueryBrand query)
        => (await QueryAsync(query)).ToActionResult();

我正在 Startup.cs 中添加 CORS 标头:

app.Use((context, next) =>

    context.Response.Headers["Access-Control-Allow-Origin"] = config["AllowedHosts"];
    return next.Invoke();
);

其中"AllowedHosts"*

有什么想法吗?

【问题讨论】:

您是否尝试过邮递员来检查您的 URL 是否适用于接听电话? 问题是由于ports 中的更改。您正在尝试从端口3000 访问端口44355。对于开发,如果您正在运行 windows,请运行此命令 chrome.exe --disable-site-isolation-trials --disable-web-security --user-data-dir="D:\temp" 或对于 linux nohup google-chrome --disable-web-security --user-data-dir='/tmp' &amp; 对于生产,您需要设置标题以访问不同的端口。 【参考方案1】:

您设置什么Access-Control-Allow-Origin 标头并不重要(在此阶段)。阅读错误信息:

它没有 HTTP ok 状态。

您可能正在使用 401 Unauthorized 响应来响应预检 OPTIONS 请求。这是一个问题,因为预检请求的目的是请求允许使用其中的凭据发出 GET 请求。

您需要从服务器上的身份验证规则中排除 OPTIONS 请求。

【讨论】:

【参考方案2】:

原来我错过了在 startup.cs 中调用 app.UseCors(); 并且在调用标头中从 Cognito 设置了错误的 API 密钥。

【讨论】:

以上是关于CORS 策略已阻止从源“localhost”访问“localhost”处的 XMLHttpRequest:对预检的响应 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CORS 策略已阻止从源访问“http://localhost...”处的 XMLHttpRequest:

CORS 策略已阻止从源“http://localhost:4200”访问“http://localhost:8080/BeginSignup”获取

CORS 策略已阻止从源“http://localhost:3001”访问“blahblahblah”获取

CORS 策略已阻止从源“http://localhost:3000”访问“http://localhost:8080/demo/getAll”获取

CORS 策略已阻止从源“http://localhost:3000”访问“http://localhost:8000/api/puppies”获取

CORS 策略已阻止从源“localhost”访问“production_api_url”处的 XMLHttpRequest