【发布时间】:2019-03-10 09:12:00
【问题描述】:
我有一个用 Go 编写的 POST API 端点,我在 Golang 响应中设置了一个名为 Set-Cookie 的标头。我已经设置了 cors 并且调用返回了正确的值。问题是响应中的标头是空的。如果我查看我的网络选项卡,它说我的 Set-Cookie 标头正在返回我期望的值,它只是有角度的,它是空的(请参阅我的 response.headers 和我的网络的 console.log 的屏幕截图标签)。
编辑
在 golang 中设置 Set-Cookie 标头后,在后续请求中添加我的 cookie 在 chrome 中的外观图片。看起来 chrome 不会自动设置 cookie。
编辑
所以,这绝对是浏览器的问题。当我用邮递员到达端点时,肯定设置了 cookie。我不一定要获取角度的cookie,我只想在浏览器中设置cookie。
我的角码:
login(user): Subscription {
return this.http
.post(`${SERVICE_URL}/login`, user, {
observe: 'response',
headers: new HttpHeaders({'Content-Type': 'application/json'})
})
.subscribe((response: HttpResponse<any>) => {
console.log(response.headers);
}, (response) => {
this._user$.next(null);
console.log(response);
});
}
我在 golang 服务器中使用 rs/cors 的 cors 设置
c := cors.New(cors.Options{
AllowedMethods: []string{"GET","POST", "PUT", "OPTIONS"},
AllowedOrigins: []string{"http://localhost:4200", "localhost:4200"},
AllowedHeaders: []string{"X-Requested-With", "Content-Type", "Authorization", "Set-Cookie"},
ExposedHeaders: []string{"Set-Cookie"},
AllowCredentials: true,
})
【问题讨论】:
-
在您的 Angular .post(...) 调用中,尝试设置“withCredentials: true”。 (顺便说一句,反对票不是来自我……)
-
cookie 被标记为 HttpOnly 使得 JavaScript 无法访问它。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
-
我只是想让它为浏览器设置cookie,我不一定需要用angular来做。