Access-Control-Allow-Headers 设置后还是报错,到底该怎么配?
我在前端用 fetch 发请求时加了自定义 header,比如 X-Requested-With,但浏览器一直报 CORS 错误,说这个 header 不被允许。我后端是用 Node.js + Express 写的,已经在响应头里加了 Access-Control-Allow-Headers: X-Requested-With,可问题还在。
是不是还要加别的?比如默认的那些 Content-Type、Authorization 之类的?我试过写成 Access-Control-Allow-Headers: *,但好像对非简单请求没用。现在卡在这儿了,不知道到底该怎么正确配置。
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
next();
});
首先你得把常用的那些 header 都加上,别光写 X-Requested-With 一个。Content-Type 和 Authorization 确实应该加进去,我一般还会把 Accept 加上,保险起见都写全了:
这段代码里我还加了 OPTIONS 请求处理,因为预检请求会用到。别走弯路,直接按这个来准没错,之前我就是因为少写了这些浪费了不少时间调试。
还有个小坑要注意,如果你用了自定义的响应头,也得在 Access-Control-Expose-Headers 里声明出来,不然前端读不到这些值。不过这跟你现在的 CORS 错误没关系,先解决当前的问题再说。