猿问

vue axios springboot前后端分离项目为什么前台无法获取后台返回的cookie?

看了个文章明白了

http://www.ruanyifeng.com/blog/2016/04/cors.html

文章中有说:
3.2:
需要注意的是,如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。

请注意

且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。

前台可读取的

headers:
    "content-type": "application/json;charset=UTF-8"
    ​haha: "woshikaikai"

响应头:

Accept    
application/json, text/plain, */*
Accept-Encoding    
gzip, deflate
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
Connection    
keep-alive
Content-Length    
26
Content-Type    
application/json;charset=utf-8
Cookie    
token=eyJhbGciOiJIUzI1NiJ9.eyJ…XiYBLEsjAAo4zUv3vhDPLckUcVfIY
Host    
192.168.1.107:8088
Origin    
http://127.0.0.1:8080
Referer    
http://127.0.0.1:8080/login
User-Agent    
Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/62.0

后端服务器设置:

Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //设置允许跨域的路径
        registry.addMapping("/**")
                //设置允许跨域请求的域名
                .allowedOrigins("http://127.0.0.1:8080")
                //是否允许证书 不再默认开启
                .allowCredentials(true)
                //设置允许的方法
                .allowedMethods("*")
                .allowedHeaders("*")
                .exposedHeaders(HttpHeaders.SET_COOKIE, "haha")
                //跨域允许时间
                .maxAge(3600);
    }
}

但是即使后台设置了

.exposedHeaders(HttpHeaders.SET_COOKIE) 

前台也是无法获取cookie的

问题描述

我也看了很多跨域文章
总的就是说

后台
这两个配置一下

.allowedOrigins("http://g3.zk1.local.csljc.com:8083")

//是否允许证书 不再默认开启

.allowCredentials(true)

//给请求的返回内容中写入cookie

public static void writeCookie(HttpServletResponse response, String cookieName, String value) {
    Cookie cookie = new Cookie(cookieName, value);
    cookie.setPath("/");
    cookie.setMaxAge(3000 * 60);
    cookie.setDomain("g3.zk1.local.csljc.com");
    response.addCookie(cookie);
}

前台:

const axios = Axios.create({
  baseURL: 'http://192.168.51.194:8021', // api的base_url
  withCredentials: true,
  timeout: 30000 // request timeout
})

访问前台项目地址为

http://g3.zk1.local.csljc.com:8083

后台api接口地址为:

192.168.51.194:8021

参考了
https://www.cnblogs.com/nuccc...

我看网上人家都说这么配置就行了,为啥我这里不行啊

喵喔喔
浏览 4141回答 4
4回答

MMTTMM

cookie你是无法获取的,只能由后端进行读写

梦里花落0921

可以获取,你把请求响应的头贴出来看看
随时随地看视频慕课网APP

相关分类

Java
我要回答