随机得到不存在“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.orgGETOPTIONS 测试这些链接。一切都很好。

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”标头的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 获取一个四位随机数(并且四位数不重复),并说明原理和算法

用随机过程进行系统识别

利用PHP随机出现0到1000的数,不足四位的前面用0补足

为啥在递增 int 时会得到随机结果 [关闭]

反应 axios 上的 CORS,但不是香草

线性回归模型中设置随机误差项有何意义?对其都有哪些假设?