[英]Set-Cookie Header Ignored
我的后端发送的csrf cookie似乎被浏览器忽略。
该请求是通过Angular(2)从http://localhost.mydomain.com:4200发出的,如下所示:
get() {
let headers = new Headers({
'Content-Type' : 'application/json',
'withCredentials' : true
});
let options = new RequestOptions({headers : headers});
return this.http.post('https://api.mydomain.com', {
o : 'csrf',
m : 'get',
p : {}
}, options)
.map((res: Response) => {
console.log('response received: ', res)
})
.catch((err: any) => {
console.log('error received: ', err);
return Observable.throw(err);
});
}
运行Express 4.x的AWS API Gateway / Lambda接收到该请求,并以以下方式发送回:
res.cookie('csrf', token, {domain : '.mydomain.com'});
在xhr响应上设置cookie应该没问题。 因为请求和响应都是mydomain.com的子域,所以我不需要withCredentials选项(尽管如图所示,我还是尝试发送它)。 接收到响应,并且标题在那里。 只是没有设置。
它在Chrome,Firefox和IE中被忽略,因此我确定问题是我缺少明显的东西:)
对于偶然发现此@robertklep和@charliefl的任何人都是正确的(谢谢!)。 编写我的请求的正确方法是:
get() {
let headers = new Headers({
'Content-Type' : 'application/json'
});
let options = new RequestOptions({
headers : headers,
withCredentials: true
});
return this.http.post('https://api.mydomain.com', {
o : 'csrf',
m : 'get',
p : {}
}, options)
.map((res: Response) => {
console.log('response received: ', res)
})
.catch((err: any) => {
console.log('error received: ', err);
return Observable.throw(err);
});
}
另外,由于我想变得懒惰,并且在服务器的'Access-Control-Allow-Origin'
使用通配符,因此我遇到了错误:
A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true
如果您有多个使用API的域,则必须根据此处和此处要讨论的内容,根据要允许的域/子域, 在服务器上动态设置'Access-Control-Allow-Origin'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.