javascript - 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);
};
用外行的话来说,这些标头有什么作用,为什么它们包含在响应中?我认为标头是作为请求的一部分设置的。
我还尝试了删除标题的应用程序,它运行良好,所以不确定用途是什么。
解决方案
每当从跨域向服务器发出请求时(例如,您从域 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
推荐阅读
- javascript - 有没有办法为视野定义一个动态边界框?
- vb.net - 我应该将什么值设置为提供程序以连接到 VB.NET 中的 Access 数据库?
- r - 我的 ggplot 条形图 reorder() 函数不起作用
- javascript - 无法正确显示悬停时导航下拉列表中的所有数据
- spring - Hibernate DuplicateMappingException 与来自不同数据库的 bean
- python - Tensorflow 2 + Keras 的知识蒸馏损失
- c# - Unity C# 的问题 - 当前上下文中不存在名称 (CS0103)
- django - 如何在 Django REST API 的序列化程序中使用 2 个模型?
- android-management-api - API_LEVEL 不合规细节……有什么要担心的吗?
- javascript - 获取完整的 url 表单服务器