express配置了cors仍然报错net::ERR_CONNECTION_RESET,携带cookie也报错

express配置cors

  1. 自己配置如果是自己配置返回头
var allowCors = function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    res.header('Access-Control-Allow-Credentials', 'true');
    next();
};
app.use(allowCors);//使用跨域中间件
  1. 可以使用npm install cors

  2. 也有一个更简单的方法就是使用express-cors代替cors

    const cors = require('express-cors')
    const express = require('express')
    const app = express();
    app.use(cors)
    app.listen(3000,()=>{
    	
    })
    

配置之后会发现依然不能请求,报错net::ERR_CONNECTION_RESET

查了下许多原因。得到的有:这个会关闭文件上传,所以需要手动开启文件上传才能避免。(来自网上,你们可以试试)

我的解决方法

  1. 跨域中间件的顺序很重要,一定要在其他中间件之前配置,否则无法生效

  2. 设置请求头和携带cookie会导致跨域请求失败
    在这里插入图片描述
    写明了请求头的限制,如果要携带请求头的话,需要在后端配置好就解决了。

    var allowCors = function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    // 新增加cors 运行的请求头
    res.header('Access-Control-Allow-Headers', 'Content-Type,lang,sfopenreferer ');
    res.header('Access-Control-Allow-Credentials', 'true');
    next();
    };
    app.use(allowCors);//使用跨域中间件
    

    cookie的问题解决方法有点不一样

    由于浏览器的安全设置,如果要携带cookie信息,就需要在响应报文头'Access-Control-Allow-Origin'*更改为请求的具体域名,如:

    var allowCors = function (req, res, next) {
    	// 修改*为请求的地址
    	res.header('Access-Control-Allow-Origin', 'http://localhost:8000');
    	res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    	// 新增加cors 运行的请求头
    	res.header('Access-Control-Allow-Headers', 'Content-Type,lang,sfopenreferer ');
    	res.header('Access-Control-Allow-Credentials', 'true');
    	next();
    };
    app.use(allowCors);//使用跨域中间件
    

    这样就可以了携带cookie进行跨域了

    需要配置多个allow-control-allow-origin

    可以使用判断值去判断

    	if(req.headers.origin === 'ip' || req.headers.origin =='ip2'){
    		res.header('Access-Control-Allow-Origin', req.headers.origin);
    	}
    	
    

    如果使用了第三方的cors设置

    可以去查看官方的文档,根据文档进行设置,具体就不细说了。
    就拿express-cors的配置

    // 传入相应的配置就可以解决跨域问题
    const cors = require('express-cors')({
    	allowOrigin:'ip地址'
    })
    

你可能感兴趣的:(express,跨域,nodejs)