XHR 跨域问题

2019-11-03 22:15:17 +08:00
 whoami9894

按我的认知应该是没有问题的,现在有点怀疑人生

现在在domain:80部署了 JSON 接口,前端 VUE 写的,静态文件放在同域名的domain:8080端口上一个静态服务器。出现登录时获取到Set-Cookie头但是浏览器没有保存

按以前跨域项目的经验这样是完全没有问题的,CORS 都设置好了,XHR 的 withCredentials 也加了,Cookie 只用 domain 和 path 区分这个 set-cookie 完全没问题。但是就是遇到了这种情况

比较了一下和原来跨域的不同点,猜测可能是影响因素:

  1. 两个端口服务都是 HTTPS,不过应该没影响啊,Cookie 没设置 Secure 属性

  2. HTTP2,发现 HTTP2 响应头为全小写,可能影响 Access-Control-Allow-Headers

请求&响应:

POST /login HTTP/1.1
Host: domain:80
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://domain:8080/
Content-Type: application/x-www-form-urlencoded
Content-Length: 21
Origin: https://domain:8080
Connection: close
Pragma: no-cache
Cache-Control: no-cache

uname=*&pwd=*




HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://domain:8080
Access-Control-Expose-Headers: Content-Type
Content-Type: application/json; charset=utf-8
Set-Cookie: think=MTU*****; Path=/; Expires=Tue, 03 Dec 2019 13:52:58 GMT; Max-Age=2592000
Vary: Origin
Date: Sun, 03 Nov 2019 13:52:58 GMT
Content-Length: 10
Connection: close

{"code":0}

接收到 Cookie 后查看火狐的本地保存 Cookie 发现没有保存,导致之后鉴权接口访问都没有携带 Cookie

1213 次点击
所在节点    问与答
4 条回复
ysc3839
2019-11-04 08:59:27 +08:00
> 发现 HTTP2 响应头为全小写
本来就不区分大小写,只是大多数程序习惯首字母大写。
whoami9894
2019-11-04 10:14:19 +08:00
@ysc3839
嗯这个我知道,只是实在找不到原因
whoami9894
2019-11-04 12:14:21 +08:00
dd
sanmaozhao
2019-11-04 15:26:23 +08:00
能想到的两点建议:
1、有没有试过换一台机器是否正常(最好是没访问过你这个 domain 的)?
我以前遇到过,在我的 Chrome 上无论如何都设置不上 cookie。
原因好像是以前在同域名设置过有问题的 cookie,导致后续 cookie 设不上。
后来清空所有 cookie 或者换机器就行了
2、如果担心和 http2 有关,就先禁用用 http1.1 试试看呗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/615887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX