所以我有一个 Angular 应用程序,它对 REST api 进行不同的调用,以获取、发布按预期工作,它们不会发送任何选项预检,但说到放置它就是地狱,我在谷歌上找不到答案,我已经尝试过每一个标题。此时我只是认为 PUT 不是一个真正的请求...我真的很绝望。
这就是我在我的角度应用程序中拨打电话的方式:
Connect = function(){
console.log("dbConnect");
let options = new RequestOptions({ withCredentials: true });
this._http.get('http://localhost:443/some/Connect', options)
.subscribe();
}
Read = function(){
console.log("Read");
let options = new RequestOptions({ withCredentials: true });
this._http.post('http://localhost:443/some/Read','', options)
.subscribe();
}
Create = function(){
console.log("Create");
let data = '{...}';
this._http.put('http://localhost:443/some/Create',data)
.subscribe(); <- only sends option
}
我已经在我的服务器上设置了我可以设置的每个标头。
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT
Access-Control-Max-Age: 86400
我在实际请求中尝试了不同的标头,例如:
let headers = new Headers();
headers.append("Content-Type", "application/json");
headers.append("Authorization",btoa("user:pass"));
无论我尝试什么,它都只是发送选项,仅此而已。为什么它不为 POST 和 GET 执行此操作?我真的不知道我在这上面花了太多时间,我在谷歌上确实没有找到关于如何进行这项工作的明确解释。我知道必须有一个预检,但即使我用你想要的任何标头回答,它也不会做任何其他事情...而且我可以看到,当我按 F12 时,我回答的标头在响应中,但有角度只是根本不在乎。
有什么想法可以让我的 PUT 工作吗?
这是我将本地主机通信到本地主机(不同的端口)。我尝试在 Firefox 上使用插件“cors Everywhere”,但是禁用该插件仍然有效,因为我允许我的服务器端的客户端端口。无论有没有corse,一切都可以工作,只是 PUT 方法不起作用..请帮忙
如果您遇到同样的问题:对我来说,解决的方法是如果请求是选项,则不在服务器端设置领域。
我也有同样的问题。就我而言,我使用的是节点服务器。添加插件也会有帮助,但我想这不是真正的方法。
我将以下几行添加到我的服务器代码中:
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");