为什么后端没有收到请求?

前端的请求是这样的
image
console里报了预检请求头不对的错
image

后端是node
我用了一个中间件来打印所有请求

为什么后端没有收到login这个请求,也没收到预检请求

如何解决这个错误?

补充:后端代码:

module.exports = options => {

return async (ctx, next) => {

const origin = ctx.request.headers.origin;

console.log(ctx.request);

const list = options.domainWhiteList;

if (list.indexOf(origin) > -1) {

ctx.set('Access-Control-Allow-Origin', origin);

ctx.set('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With');

ctx.set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS,TRACE');

ctx.set('Access-Control-Allow-Credentials', true);

}

if (ctx.request.method === 'OPTIONS') {

ctx.status = 200;

}

await next();

};

};
阅读 7.2k
7 个回答

打开chrome的network 点击others
这里有很多预检请求
发现里面的头部和状态都不是我设置的那样的
怀疑是egg自动处理了这些请求
偶然看到了一个插件egg-cors
于是我在config里关闭了cors

`cors: {
  enable: false,
},`

问题解决了!!!

你好,能够看看你的 proxy 是如何设置的?

这是触发跨域限制,被浏览器拦截了,因为端口不同。

常见跨域场景

URL                                      说明                    是否允许通信
http://www.domain.com/a.js
http://www.domain.com/b.js         同一域名,不同文件或路径           允许
http://www.domain.com/lab/c.js

http://www.domain.com:8000/a.js
http://www.domain.com/b.js         同一域名,不同端口                不允许
 
http://www.domain.com/a.js
https://www.domain.com/b.js        同一域名,不同协议                不允许
 
http://www.domain.com/a.js
http://192.168.4.12/b.js           域名和域名对应相同ip              不允许
 
http://www.domain.com/a.js
http://x.domain.com/b.js           主域相同,子域不同                不允许
http://domain.com/c.js
 
http://www.domain1.com/a.js
http://www.domain2.com/b.js        不同域名                         不允许

跨域解决方案

1、 通过jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域资源共享(CORS)
7、 nginx代理跨域
8、 nodejs中间件代理跨域
9、 WebSocket协议跨域

一般使用后端跨域资源CORS比较方便一点

要带上cookie,接口设置Access-Control-Allow-Origin 星号不行,改成你的地址,http://localhost:xxx试一下。
image.png

下面这是请求地址不一样的情况。不过都不存在跨域了
image.png

新手上路,请多包涵

可以使用nginx代理解决跨域

//设置跨域访问
app.all("*",function(req,res,next){
res.setHeader('Content-Type','text/html;charset=utf-8');
res.setHeader('Access-Control-Allow-Credentials','true');
res.setHeader('Access-Control-Allow-Origin','*');
res.hasHeader('Access-Control-Allow-Origin','*');
next();
});

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题