我的问题是:浏览器不保存标头中的 cookie Set-Cookie。
我的前端(Angular2)已本地部署在我的桌面上。后端位于登台服务器上,因此交互是通过 CORS 进行的。
我在带有标头的请求中得到的内容Set-Cookie:
HTTP/1.1 200 OK
Date: Tue, 08 Aug 2017 11:00:03 GMT
Server: .....
Access-Control-Allow-Origin: http://localhost:4200
Access-Control-Allow-Credentials: true
Content-Type: application/json
Content-Length: 39
Set-Cookie: session=.........; Path=/
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)
收到上述答复后,我将发送以下请求:
GET /api/..... HTTP/1.1
Host: ...{some url}...
Connection: keep-alive
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Content-Type: application/json
Accept: application/json, text/plain, */*
withCredentials: true
Referer: http://localhost:4200/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,ru;q=0.6,uk;q=0.4
Run Code Online (Sandbox Code Playgroud)
如您所见,那里没有 cookie。另外,我在外部应用程序(Chrome 插件)、JS 控制台和该部分的 Web 控制台中看不到它们Application。所以cookie肯定不是浏览器保存的。
我的问题是:问题出在哪里?我的标头/其他问题是否有问题,或者是标头的后端问题?问题可能出在哪里?
关于重复的答案 - 正如您所看到的,我尝试了在其他主题中找到的答案,但它们没有解决我的问题。
无意中找到了答案。如果您遇到同样的问题,请检查您是否以正确的方式定义标头。
原因是withCredentialsheader 和他在 Angular 中的定义。要正确设置它,您应该按以下方式进行:
let options = new RequestOptions();
options.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)
使用这个语法一切都应该没问题。
| 归档时间: |
|
| 查看次数: |
8523 次 |
| 最近记录: |