Open OhNaNaSun opened 8 years ago
浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
只要同时满足以下两大条件,就属于简单请求。
(1) 请求方法是以下三种方法之一:
(2)HTTP的头信息不超出以下几种字段:
凡是不同时满足上面两个条件,就属于非简单请求。 浏览器对这两种请求的处理,是不一样的。
参考:跨域资源共享详解 CORS [http://www.ruanyifeng.com/blog/2016/04/cors.html]
前端:
$.ajax({
type: "POST",
url: "http://XXX/testCORS",
//contentType: "application/json;charset=UTF-8",使用默认的application/x-www-form-urlencoded
dataType: "json",
data: {},
success: function () {
}
});
后端:
router.post('/testCORS', function(req, res){
res.setHeader('Access-Control-Allow-Origin', '*');
res.send({msg:"success"});
})
前端(设置了contentType: "application/json;charset=UTF-8"):
$.ajax({
type: "POST",
url: "http://XXXX/testCORS",
contentType: "application/json;charset=UTF-8",
dataType: "json",
data: {},
success: function () {
}
});
后端(相比简单请求,多了OPTIONS的处理):
router.options('/testCORS', function(req, res){
//res.setHeader('Access-Control-Allow-Methods', 'POST');
res.setHeader('Access-Control-Allow-Origin', '*');//重要
res.setHeader('Access-Control-Allow-Headers', 'content-type');//重要
res.status = 204;
res.send();
})
router.post('/testCORS', function(req, res){
res.setHeader('Access-Control-Allow-Origin', '*');
res.send({msg:"success"});
})
如何解决 Ajax 跨域请求不到的问题 ajax 设置Access-Control-Allow-Origin实现跨域访问 跨域资源共享 CORS 详解