V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
whoami9894
V2EX  ›  问与答

XHR 跨域问题

  •  
  •   whoami9894 · 2019-11-03 22:15:17 +08:00 · 1204 次点击
    这是一个创建于 1607 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    现在在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

    4 条回复    2019-11-04 15:26:23 +08:00
    ysc3839
        1
    ysc3839  
       2019-11-04 08:59:27 +08:00 via Android
    > 发现 HTTP2 响应头为全小写
    本来就不区分大小写,只是大多数程序习惯首字母大写。
    whoami9894
        2
    whoami9894  
    OP
       2019-11-04 10:14:19 +08:00 via Android
    @ysc3839
    嗯这个我知道,只是实在找不到原因
    whoami9894
        3
    whoami9894  
    OP
       2019-11-04 12:14:21 +08:00
    dd
    sanmaozhao
        4
    sanmaozhao  
       2019-11-04 15:26:23 +08:00
    能想到的两点建议:
    1、有没有试过换一台机器是否正常(最好是没访问过你这个 domain 的)?
    我以前遇到过,在我的 Chrome 上无论如何都设置不上 cookie。
    原因好像是以前在同域名设置过有问题的 cookie,导致后续 cookie 设不上。
    后来清空所有 cookie 或者换机器就行了
    2、如果担心和 http2 有关,就先禁用用 http1.1 试试看呗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2760 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:04 · PVG 20:04 · LAX 05:04 · JFK 08:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.