我是localhost上的host angular 4 app,因为我需要向我在web上托管的后端发出api请求(比如https://example.com)我正在使用代理。这是我的代理配置文件。
"*": {"target":"https://example.com",
"secure": false,
"logLevel": "debug",
"changeOrigin": true }
这样我发出的每个请求都会通过目标网址。当我第一次请求登录包含凭据的页面时,我会收到响应中的cookie。但是当我向https://example.com/images发出另一个请求(POST)时,我被重定向到登录页面。我可以在我的网络中看到没有与请求标头一起发送的cookie,但是我确实从我的第一次登录请求中收到了它们。我检查了很多解决这个问题的方法。他们中的许多人要求在我的ajax请求中包含{withCredentials = true},我在每个请求中都这样做。这是我的要求
$.ajax({
url: "https://example.com/images",
type: "POST",
crossDomain:true,
headers: {
// includes necessary headers .
},
xhrFields: {
withCredentials: true
},
data:data1 ,
//data1 is json formatted
success: function (res) {
console.log(res)
},
error: function (xhr, status) {
console.log(status);
}
});
但这并没有解决问题。我怀疑cookie因代理而丢失,或者浏览器没有正确处理它们。我检查过我已经允许第三方cookie。我需要使用第二个请求发送这些会话cookie。我试图手动添加它们,但我没有找到一种方法来获取并发送它们以及此请求。我该如何解决这个问题?如果我删除代理,那么我将得到CORS问题。我无法访问后端服务器。因此我尝试使用代理处理CORS,它可以正常用于登录请求。但是第二个请求没有发送cookie。有谁可以帮忙吗?
答案 0 :(得分:0)
为什么你在角应用程序中使用jQuery,为什么用它来执行ajax请求,如果angular提供http client?
您最好使用它,然后使用interceptors为请求添加标头。
使用Angular时,请使用Angular方式。并使用其工具/库/模式。