浏览器跨域请求成功了,但是cookie 没有带过去,求解?

Awbeci
  • 2.8k
江苏

如果谁帮忙解决,我会给他100元,虽然不多,但是体现出我想解决它的决心!!!

image.png

image.png
下面是spring gateway配置

spring:
  cloud:
    loadbalancer.ribbon.enabled: false
    gateway:
      globalcors:
        #add-to-simple-url-handler-mapping: true
        cors-configurations:
          '[/**]':
            allowedHeaders: "*"
            # 为true时allowedOrigins不允许为* 会报错
            allowCredentials: true
            allowedOrigins: 
              - "https://xxx.com"
              - "http://127.0.0.1:3000"
              - "http://localhost:3000"
            allowedMethods: "*"
      default-filters:
        - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials
回复
阅读 656
4 个回答
realwugang
  • 697
广东

1、前端请求结合withCredentials配置

// 原生xhr
xhr.withCredentials = true

// fetch
fetch(url, {
  credentials: 'include'
})

// axios库 全局配置
axios.defaults.withCredentials = true

2、检查下cookie的Secure设置,需要为false才能非https传送

3、当设置 SameSite=none 时,跨域请求才会携带 cookie

控制台有报错吗

夏天结束了
  • 2
上海市浦东新区新手上路,请多包涵

后台响应头加上这个
header('Access-Control-Allow-Credentials: true');

既然跨域了,cookie 显然就没法传递了,因为 cookie 是保存在 domain 下的,也就是你访问地址是 http://a.com, 那么你的 cookie 也在 http://a.com 下,然而你要请求的地址是 http://b.com,那浏览器就自动去寻找 http://b.com 下的 cookie ,那显然是不存在的,一般跨域的话,要么使用 token 方案,要么把 sessionId 放到 header 里面,拦截器每次设置 session 即可。

另外就是用前端的方式读取 cookie 并写到 header 中,但是服务器依然无法向前端设置 cookie

总的来讲, cookie 是有域隔离的,而你现在又在 跨域 ,显然浏览器肯定是不会帮你自动完成这些琐事了,需要你自己想办法实现原本是浏览器默认实现的功能。

宣传栏