首页 > 解决方案 > Access-Control-Allow-Headers 它究竟做了什么以及为什么将它包含在响应中?

问题描述

我正在关注express以下路线的教程:

module.exports = function(app) {
    app.use(function(req, res, next) {
        res.header(
            "Access-Control-Allow-Headers",
            "x-access-token, Origin, Content-Type, Accept" 
        );
        next();
    });

    app.post(
        '/api/auth/signup',
        [
            verifySignUp.checkDuplicateUsernameOrEmail,
            verifySignUp.checkRolesExist
        ],
        controller.signup
    );

    app.post('/api/auth/signin', controller.signin);
};

用外行的话来说,这些标头有什么作用,为什么它们包含在响应中?我认为标头是作为请求的一部分设置的。

我还尝试了删除标题的应用程序,它运行良好,所以不确定用途是什么。

标签: javascriptexpress

解决方案


每当从跨域向服务器发出请求时(例如,您从域 B 请求托管在域 A 的 API),通常浏览器会出于安全原因阻止它们。为了导航(这可能不是“正确”的词;事实上,这是唯一的方法),有一种称为CORS(跨源资源共享)的机制,其中服务器必须明确表示它想要允许资源也与其他域(来源)共享。现在,要“告诉”这一点,响应必须包含正确的 CORS 标头,即Access-Control-Allow-Origin header.

所以通俗地说,它只是一种通知浏览器的机制,“嘿!看,我故意要把这个响应发送到另一个来源。不要阻止它。”

所以让我们说。如果服务器使用通配符响应:

 Access-Control-Allow-Origin: *, 

这意味着,任何域都可以访问该资源。

同样,如果服务器发送

Access-Control-Allow-Origin: "https://example.com"

然后,这意味着只能在这个特定的域上访问资源,该域是"https://example.com"

这是我的理解。

有关更多技术细节,您可以阅读: https ://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers


推荐阅读