【发布时间】:2014-09-03 20:06:00
【问题描述】:
在 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);
这里是否有“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”标头,它似乎会完全避免发送请求。
如何在 Node.js 中向浏览器公开 CORS“Access-Control-Allow-Origin”值?
【问题讨论】:
-
它像往常一样作为标头发送。是什么让您认为该请求被避免了?不过,应该有一个预检请求。
-
@Bergi 如果浏览器抛出 no "Access-Control-Allow-Origin" 标头错误,请求的处理似乎永远不会启动。
-
@epascarello 这无疑是一篇令人兴奋的文章……
标签: javascript node.js cors