没有设置Angular 2 cookie

时间:2017-04-02 09:28:41

标签: angular http cookies

我使用这样的http:

private headers = new Headers({ 'Content-Type': 'application/json' })
login(loginUser: LoginUser): Promise<User> {
        return this.http.post('http://localhost:9009/api/users/login', JSON.stringify(loginUser), { headers: this.headers })
            .toPromise()
            .then(res => res.json())
            .catch(this.handleError)
    }

这应该自动将cookie设置为浏览器,如下所示:

Console screenshot

但浏览器中没有设置cookie。

  • Angular版本:2.4.10
  • 浏览器:Chrome 56.0.2924.87(64位)| FireFox 52.0.2(64位)
  • 语言:TypeScript 2.2.1
  • 节点(针对AoT问题):node --version = 3.10.10

回复标题:

Response headers

2 个答案:

答案 0 :(得分:2)

我在提到以下资源时解决了我的问题:

首先,这是关于num=minval的问题。我必须在我的java服务器(在过滤器中)设置CORS标头,如下所示:

Cross-origin

其次,我在提出请求时设置 httpServletResponse.addHeader("Access-Control-Allow-Origin", "http://localhost:4444"); httpServletResponse.addHeader("Access-Control-Allow-Credentials", "true"); httpServletResponse.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); httpServletResponse.addHeader("Access-Control-Max-Age", "3600"); httpServletResponse.addHeader("Access-Control-Allow-Headers", "Content-Type, Range"); httpServletResponse.addHeader("Access-Control-Expose-Headers", "Accept-Ranges, Content-Encoding, Content-Length, Content-Range"); 归因,如下所示:

withCredentials

最后,感谢@JJJ帮助我发现我的拼写错误。

答案 1 :(得分:0)

  1. 客户端应具有withCredentials:true选项,以将cookie传递给后端api,而CORS配置应具有“ Access-Control-Allow-Credentials”,“ true”

  2. 如果在其他主机浏览器中创建的cookie不会从前端传递cookie(cookie创建主机和客户端URL主机地址应匹配)

  3. 除了cookie

  4. ,CORS将用于配置允许的标头,主机和http方法
  5. 浏览器在发出实际请求之前先进行OPTIONS调用,因此,如果使用api网关,则应配置预流程(例如:apigee)