接前文,本地搭建的一个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

查到几个文档大都表示是浏览器拦截,或者本地缓存或者跨域访问。因为收到成功结果,所以排除拦截,经测试 关闭浏览器重启服务的第一笔就会这样返回 所以也不是本地缓存。 暂不理解为什么会这样显示,如果有大神知道其中原因,希望不吝赐教