随机得到不存在“Access-Control-Allow-Origin”标头
Posted
技术标签:
【中文标题】随机得到不存在“Access-Control-Allow-Origin”标头【英文标题】:Randomly got No 'Access-Control-Allow-Origin' header is present 【发布时间】:2020-10-23 06:18:18 【问题描述】:我用 EXPRESS.js 构建了一个 CDN 服务器,将它放在子域上,并使用 cors
包来启用 CORS
var app = express();
app.use(cors(
methods: "GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS",
));
function shouldCompress (req, res)
if (req.headers['x-no-compression']) return false
return compression.filter(req, res)
app.use(compression(filter: shouldCompress))
app.use(requestIp.mw());
app.use(helmet());
app.use(bodyParser.urlencoded(limit: '5mb', extended: false));
app.use(bodyParser.json(limit: '5mb'));
app.use(bodyParser.text(type: 'text/plain',limit: '5mb'));
app.use(cookieParser());
但由于 CORS 政策,有时我的网站无法正确加载。
我用https://www.test-cors.org
和GET
和OPTIONS
测试这些链接。一切都很好。
Access to XMLHttpRequest at 'https://cdn.boghrat.com//adm/notif.html' from origin 'https://boghrat.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
【问题讨论】:
您可以尝试不将OPTIONS
添加到方法列表中吗?例如app.use(cors())
并向您的应用程序发送一个选项请求以查看它是否有效?如果你可以让它在零配置下工作,下一步就是添加配置并查看它是否有效。如果存在简单的错误配置,这将有助于调试。
【参考方案1】:
使用这个
app.use(function (req, res, next)
res.header("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Methods",
"GET,HEAD,PUT,POST,OPTIONS,UPDATE,DELETE"
);
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization, token"
);
next();
);
【讨论】:
确实,OP 需要允许一些头文件,而不仅仅是方法以上是关于随机得到不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章