express跨域名请求,chrome无法显示set-cookie?

相门城下
  • 773

express搭建的后台
跨域名请求,chrome浏览器network中无法查看到set-cookie的请求头,但是edge可以。
然而虽然chrome无法查看到set-cookie,但是第二次请求后台却可以从request中读取到之前设置的cookie。
跨域的请求头已经设置,ajax也设置了withCredentials:true.
chrome下的请求
chrome下的请求

后台可以获取到cookie
后台可以获取到cookie

edge下的请求
edge下的请求
edge发出的请求,后台也可以正常获取cookie
edge下的请求

express中的代码

router.post('/login',function(req,res) {
    var {username, password} = req.body;
    var user = new User({name:username,pw:password});
    userService.query(user,function(user) {
        var result = new ResResult({code:1,data:user});
        console.log('Cookies: ', req.cookies)
        // Cookies that have been signed
        console.log('Signed Cookies: ', req.signedCookies)        
        res.cookie("user",user.name,{
            sameSite: false
        })
        res.json(result);
    })
})

但是还有费解的是,如果不跨域名而只是端口号不一样,chrome中可以正常显示set-cookie出来
chrome不跨域名,端口号不一样

回复
阅读 2.2k
6 个回答

差点点错点成踩了?

我怀疑这是chrome有意为之的,因为跨域的cookie无法用js操作,所以意义不大。

真要看,可以在application里面看。

跨域了,同源策略

ajax credentials

就是同源策略,放到同域名不同端口下或者子域名下可以正常操作。不同域名下是不能操作的。
你这里可以试试用2个不同的域名尝试一下,线上和localhost是不一样的

用fiddler查看该请求头,的确是有set-cookie字段的
fiddler截图
既然的确设置了cookie,并且之后的请求也能够获取到这个cookie,那看来是chrome故意隐藏了这个字段。
暂且先把这口锅甩chrome身上,等以后有了其他结论再来翻案。

我和你简直一模一样,后端
access-control-allow-origin
access-control-allow-credentials
也都设置了,前端 ajax的withCredentials也设置了,但就是在network中死活看不到 set-cookie和cookie,而firefox却可以看到

你知道吗?

宣传栏