繁体   English   中英

Set-Cookie标头被忽略

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM