【发布时间】:2022-01-24 07:01:09
【问题描述】:
我一直在阅读有关 CORS 和 pre-flight 请求的信息,并且基本上了解它是一种 OPTIONS 请求,在发出实际请求之前发送,如果服务器允许,则再次发送实际请求。但最让我困惑的是,浏览器如何能够接收响应标头而不接收来自服务器的实际响应?无论是否发送了响应,是否都会发送标头?就像下面的 nodejs 代码 sn-p 你可以看到我创建了一个 middleware 接收 OPTIONS请求并使用发送实际请求所需的标头进行响应。一旦它在同一 login 路由上得到验证,浏览器就会发送实际请求。但您一定注意到了,我没有从 的 handler 发送 response OPTIONS 中间件功能 我只发送标头。那么这一切仍然如何解决?标头如何在没有响应的情况下发送到浏览器?
app.options("/login", (req, resp, next) => {
resp.header("Access-Control-Allow-Origin", "http://127.0.0.1:5500");
resp.header("Access-Control-Allow-Methods", "GET, POST, PUT");
resp.header("Access-Control-Allow-Headers", "Content-type");
next();
});
app.post("/login", (req, resp) => {
resp.header("Access-Control-Allow-Origin", "http://127.0.0.1:5500");
resp.header("Access-Control-Allow-Methods", "GET, POST, PUT");
resp.header("Access-Control-Allow-Headers", "Content-type");
resp.json({
msg:"Sucess"
});
});
【问题讨论】:
标签: node.js express cors http-headers http-method