CORS的“Access-Control-Allow-Origin”值如何暴露给浏览器?

在Node.js中,我理解在响应头中发送“Access-Control-Allow-Origin”值的语法,但是我很困惑这个值在服务器处理之前如何暴露给浏览器,因为响应头是稍后决定的,所以在处理请求之后,何时实际发送响应。

例如,用Express:

/* Server */ var express = require('express'); var bodyParser = require('body-parser'); var app = express(); app.use(bodyParser.json()); app.post('/login', function (req, res) { var username = req.body.username; var password = req.body.password; if (username !== "undefined"){ respondSuccess(req,res); } else { respondFailure(req,res); } }); app.listen(2222); 

这里,不pipe是否存在“Access-Control-Allow-Origin”头,都取决于用户名未定义的结果。

 function respondSuccess(){ body = "Success!"; res.writeHead(200, { 'Access-Control-Allow-Origin' : '*', 'Content-Length' : body.length, 'Content-Type' : 'text/html' }); res.write(body); res.end(); } function respondFailure(){ body = "Failure!"; res.writeHead(200, { 'Content-Length' : body.length, 'Content-Type' : 'text/html' }); res.write(body); res.end(); } 

但是,如果Web浏览器没有检测到与源相匹配的“Access-Control-Allow-Origin”标头,它似乎完全避免发送请求。

CORS“Access-Control-Allow-Origin”值在Node.js中如何暴露给浏览器?

这个问题已经出现了很多次,但也许还有一些重点

  1. 对于非简单查询,浏览器会按照此处所述发送OPTIONS消息预检,并在此问题中具体询问 。 您的应用程序没有响应浏览器发送的OPTIONS消息,因此CORS随后不启用。
  2. 具体如何在node.js服务器上下文中截取OPTIONS消息,请看这里和这里
  3. 另外,当使用jQuery来访问你的站点时,你需要构造头部 ,如果你使用HTTP Auth,那么你不能接受'*' 。 看来你正在处理logintypes的动词。