本文主要是介绍eggjs踩坑之路 跨域cookie篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接前文,本地搭建的一个vue应用,地址为127.0.0.1:8080。 后端代码运行在7001端口。之前已经完成了基本的通信功能,在中间件中设置了Access-Control-Allow-Origin为* ,可以实现跨域访问和jsonp。本次的功能是让前后端共同实现用户登陆信息记录的功能。 设计思路:
1.前端发起第一次get请求,请求主页内容。此时提示用户登陆,用户登陆使用post发送相应数据。后端收到数据并记录用户ID,设置到cookie中,返回给浏览器。浏览器记录此cookie 2.下次用户再请求主页时,浏览器会自动携带用户的cookie数据,此时后端直接返回该用户已登陆,给出相应返回码,前端收到后跳转界面
遇到的问题: 1跨域的cookie不能像正常cookie一样返回,浏览器会自动屏蔽,需要引入egg-cors插件,设置
credentials 跨域带脚本时该值设为true才能正常获得cookie 第二个值origin,有资料说只能设置成具体ip如127.0.0.1:8080 不能为*(通配符),原因不明 而且值得注意的是,localhost在很多时候不能和127.0.0.1公用,例如这种情况,直接访问localhost而不是ip会返回失败,建议本地测试时全部使用127.0.0.1。相应的前端在发送post请求时需要携带withCredentials为true标志允许跨站点脚本
2.前端第二次get请求时,抓包可以看到上送了cookie值,但是egg中读到undefined,这点在egg官网里没有提到,那就是如果你set cookie的时候附加了参数,比如设置httponly,那么get的时候需要传同样的参数才能返回结果
最后:直到现在请求的时候一直Provisional headers are shown
查到几个文档大都表示是浏览器拦截,或者本地缓存或者跨域访问。因为收到成功结果,所以排除拦截,经测试 关闭浏览器重启服务的第一笔就会这样返回 所以也不是本地缓存。 暂不理解为什么会这样显示,如果有大神知道其中原因,希望不吝赐教
作者:nightmareT
链接:https://juejin.cn/post/6844903897941671949
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这篇关于eggjs踩坑之路 跨域cookie篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!