关于使用CORS时遇到的一些坑

最近在写个人博客的时候,打算用session去保持登录态。但是在使用的时候,发现请求中没有cookie。后来查了一下,是跨域的问题(用了CORS)。
根据同源策略,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源两。而跨域的出现,就是为了解决两个不同源地址之间的通信。其实网页A的请求是已经发出去了的(可以根据开发者工具中的Network看状态码),只不过响应被浏览器给拦截了。
而我单纯的以为用了CORS之后问题就会解决。一运行,报错了?
在这里插入图片描述

网上查了一下,大致的意思,就是我CORS没有配置好,于是在后端加了这么些代码:
在这里插入图片描述

app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin",'null');
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Credentials","true");
    res.header("Access-Control-Allow-Methods","POST, GET, OPTIONS, PUT, PATCH, DELETES");
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

第一个是允许的源,第二个是允许的headers,第三个是允许带Cookie,第四个是允许的请求方式,第五个就不用多说啦
不单单这么简单,设置完了之后,在Request里还要加上:
在这里插入图片描述

	$.ajax({
				...: ...,
	    		withCredentials: true,
				crossDomain: true,
				...: ...
				})

这两条语句,第一条就是携带Cookie,第二条就是跨域啦。这么做了之后,果然就可以通信并且带了Cookie;

如果要带cookie(即设置了withCredentials: true),那么Access-Control-Allow-Origin不能用通配符(‘*’),得用具体的Origin。这个Origin可以在开发者工具中的Network上看到(浏览器在第一次请求其他页面的时候,会发两个请求,第一个是简单请求(method是OPTIONS),里面也会有Origin):
在这里插入图片描述

把Origin写在Access-Control-Allow-Origin里就好啦。

写到这也就结束了我前端的第一篇博客,如果有什么错误,希望大家可以指出,一起进步~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值