前后端分离中的 cookie 跨域问题
背景
毕设项目的前后端分离改造,重写整个前端和后端接口
场景
- 获取登录验证码接口(后端生成)
- 登录接口(需要输入验证码)
1接口在返回前端 验证码图片 的同时,向响应头中写入了一个captchaOwner
的 cookie,用于 验证码 与 验证码请求者 的匹配(服务器端则是被存在了redis中)
2接口在校验账户密码的同时,会接收这个captchaOwner
cookie,并校验 与 redis 中存储的数据是否匹配 是否匹配
问题
获取不到这个 cookie
解决
经查阅资料,意识到这个 cookie,是会被响应后浏览器自动设置的,不需要额外的操作
但是仍然会存在 跨域问题,因为这个 cookie 是被设置在服务器域名(端口)下的
CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow-Credentials
字段
response.setHeader("Access-Control-Allow-Credentials", "true"); //需要注意的是,如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名 response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
同时前端 ajax 请求设置
axios.get('http://localhost:8079/community/captcha', { responseType: "blob", withCredentials: true //这里
同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。
本文作者:Yao's Blog
本文链接:https://www.cnblogs.com/yaocy/p/17131902.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步