相关疑难解决方法(0)

Node.js:POST - 请求方法:选项状态代码:403禁止

我们有以下设置:

Front end code : REACT (Hosted using express js) (lets call this www.domainA.com)
Backend        : .NET WEB API (Hosted in IIS 7.5) (lets call this www.domainB.com)
Run Code Online (Sandbox Code Playgroud)

FE应用程序的域正在向Web api发出GET数据和POST数据的请求.

GET工作正常,但每当我尝试将数据发布到Web API时,它都会抛出以下错误:

Request URL: http://www.domainB.com/api/postdataoperation
Request Method: OPTIONS
Status Code: 403 Forbidden
Run Code Online (Sandbox Code Playgroud)

我查看了许多CORS文章并继续在IIS中设置HTTPResponseHeaders,如下所示:

Access-Control-Allow-Methods : POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin  : http://www.domainA.com
Run Code Online (Sandbox Code Playgroud)

反应解决方案的发布请求如下:

axios.post(`http://www.domainB.com/api/postdataoperation`, {userId});
Run Code Online (Sandbox Code Playgroud)

post node.js http-status-code-403 express axios

8
推荐指数
1
解决办法
3269
查看次数

是否可以向 CORS 预检请求添加请求标头?

我有一个网站,它通过普通XmlHttpRequest(见下文)从外部服务器(不是为网站提供服务的服务器)访问 API 。该 API 需要一个 API 密钥来访问要添加为请求标头的服务。但是,由于这些是CORS 请求,因此浏览器首先执行预检请求以检查该服务器是否支持 CORS。现在,服务器似乎也希望在浏览器完成的这些预检请求中看到 API 密钥。是否可以将 API 密钥也传递给预检请求?

const req = new XMLHttpRequest();
req.open("GET", "https://some/api/endpoint");
req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
req.setRequestHeader("x-api-key", _apiKey);
req.onload = () => {
  // ...
};
req.send();
Run Code Online (Sandbox Code Playgroud)

javascript browser http xmlhttprequest cors

3
推荐指数
1
解决办法
1331
查看次数

尽管已设置标头,但调用 API 网关仍返回 CORS 错误

我有一个与 Lambda 函数集成的 API 网关(HTTP 类型)。我试图从本地主机调用该函数,如下所示:

const jwt = getAuthToken();
const formBody = new FormData();
formBody.set('user', 'test');

const res = await fetch('https://example.execute-api.eu-west-1.amazonaws.com/default/GetShareValue', {
method: 'POST',
body: formBody,
headers: {
   'Authorization': jwt
   }
});
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误消息:

从源“http://localhost:3000”获取“https://example.execute-api.eu-west-1.amazonaws.com/default/GetShareValue”的访问已被 CORS 策略阻止:对预检的响应请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

我了解不正确的 CORS 设置将阻止浏览器显示 Lambda 函数返回的内容。但是,我的 API 网关指定了 CORS 设置:

在此输入图像描述

根据此线程,在 Lambda 函数的响应中设置标头非常重要。我已将它们设置为相同。这是我的 Lambda 函数:

exports.handler = async (event, context) => {
    let body;
    let statusCode = '200';
    const headers = {
        'Content-Type': 'application/json',
        "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,X-Amz-Security-Token,Authorization,X-Api-Key,X-Requested-With,Accept,Access-Control-Allow-Methods,Access-Control-Allow-Origin,Access-Control-Allow-Headers",
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Methods": "*",
        "X-Requested-With": …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services cors aws-lambda aws-api-gateway

1
推荐指数
1
解决办法
3290
查看次数