Javascript 使用自定义标头获取GET请求

Javascript 使用自定义标头获取GET请求,javascript,node.js,reactjs,cors,fetch-api,Javascript,Node.js,Reactjs,Cors,Fetch Api,我试图向API发送GET请求,但当我在代码中添加自定义头时,发生了一些奇怪的事情。 在某个地方,请求方法在到达web服务器时会更改为选项 但是当我在没有标题的情况下执行相同的操作时,它将是一个GET类型。 当我使用应用程序postman(API开发工具)时,请求工作正常 请求代码: let token=this.generateClientToken(私钥,消息); 让MyHeader={ “appID”:appID, “授权密钥”:令牌 } 取('http://localhost:8080/

我试图向API发送GET请求,但当我在代码中添加自定义头时,发生了一些奇怪的事情。 在某个地方,请求方法在到达web服务器时会更改为选项

但是当我在没有标题的情况下执行相同的操作时,它将是一个GET类型。 当我使用应用程序postman(API开发工具)时,请求工作正常

请求代码:

let token=this.generateClientToken(私钥,消息);
让MyHeader={
“appID”:appID,
“授权密钥”:令牌
}
取('http://localhost:8080/api/app/postman', {
方法:“获取”,
//正文:JSON.stringify(“”),
标题:myheaders
}).然后(功能(响应){
console.log(response.status);//=>编号100–599
console.log(response.statusText);//=>字符串
console.log(response.headers);//=>头
console.log(response.url);//=>字符串
返回response.text()
},函数(错误){
console.log(error.message);//=>字符串
})

您可能希望在拥有
http://localhost:8080/api/app
节点应用程序正在运行

包含有关此处发生情况的详细信息:您的
appID
authorizationkey
请求头在发送
GET
请求之前,会触发浏览器发送CORS飞行前
选项
请求

要处理该
OPTIONS
请求,您可以安装
cors
npm软件包,并按照中的说明进行配置:

var express=require('express'))
,cors=require('cors'))
,app=express();
app.options('*',cors());//在其他路线之前包括
app.listen(80,函数(){
log('CORS-enabledwebserver监听端口80');
});

公认的答案游戏告诉我解决方案,我使用的不是nodeJS后端,而是带有php fpm的普通Nginx

但是答案解释了一个具有自定义头的请求如何总是首先执行一个选项请求来验证对设置头名称的接受,因此我必须更改Web服务器中的响应,以返回包含正确头的204代码。 若并没有它,我的PHP代码将受到攻击,身份验证将失败,并导致403代码,因为使用的内容和请求方法缺少标题

这是我添加到Nginx主机以使其工作的内容:

location ~ \.php$ {
             add_header 'Access-Control-Allow-Origin' "*";
             add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
             add_header 'Access-Control-Allow-Headers' 'appID,authorizationkey';

             if ($request_method = 'OPTIONS') {
                return 204;
             }
}

我知道这还远远不够完美,但现在它已经成功了。再次感谢您为我指明了正确的方向。

请查看此内容。。我几乎可以肯定这与CORS有关: