Node跨域问题及cookie
2019-03-29 本文已影响0人
微微笑的蜗牛
在使用 Node 开发后端服务时,如果遇到需要跨域请求,则服务端需加上:
//设置跨域访问
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', req.get("Origin"));
res.header('Access-Control-Allow-Headers', 'credentials,Content-Type, Content-Length, Authorization, Accept, X-Requested-With, token');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
//若要返回cookie、携带seesion等信息则将此项设为true。此时Access-Control-Allow-Origin不能设置为*
res.header("Access-Control-Allow-Credentials","true");
next();
});
-
如果有自定义的 header 字段,则需要在
'Access-Control-Allow-Headers'
中添加。 -
如果需要设置 cookie ,则需要设置
Access-Control-Allow-Credentials
为 true ,并且Access-Control-Allow-Origin
不能设置为*
。 -
请求时需要带上
credential
相关的参数,这点很重要,否则session request id
每次都不一样。
-
若使用 fetch ,设置
credentials: 'include'
。const init = { headers: { 'Accept': 'application/json', 'Content-Type': 'application/json;charset=UTF-8', }, method: 'GET', credentials: 'include' }
-
若使用 request ,设置
request.defaults({jar: true})
。// qs,表示query参数 var options = { 'url': url, 'qs': { 'code': code, } } // 设置可以使用cookie var defaultReq = request.defaults({jar: true}) defaultReq(options, function (error, response, body) { }
-
若使用 axios , 则设置
withCredentials:true
。