Asp.net core CORS策略是否会阻止非浏览器请求访问资源?
据我所知,使用CORS模块将从资源中删除Asp.net core CORS策略是否会阻止非浏览器请求访问资源?,asp.net-core,cors,Asp.net Core,Cors,据我所知,使用CORS模块将从资源中删除Access Control Allow Origin头,导致浏览器中的XmlHttp请求失败 但是,这是否会阻止来自CURL或其他本机应用程序/web服务器(即通过PHP编写和运行的请求)的Http请求成功地从该资源检索数据?CURL和其他非浏览器Http客户端必须忽略访问控制允许源头。看见 但是,这是否会阻止来自CURL或其他本机应用程序/web服务器(即通过PHP编写和运行的请求)的Http请求从该资源成功检索数据 不,它不会阻止任何其他客户端成功
Access Control Allow Origin
头,导致浏览器中的XmlHttp请求失败
但是,这是否会阻止来自CURL或其他本机应用程序/web服务器(即通过PHP编写和运行的请求)的Http请求成功地从该资源检索数据?CURL和其他非浏览器Http客户端必须忽略
访问控制允许源头。看见
但是,这是否会阻止来自CURL或其他本机应用程序/web服务器(即通过PHP编写和运行的请求)的Http请求从该资源成功检索数据
不,它不会阻止任何其他客户端成功检索资源
CORS协议仅由浏览器强制执行。它不是由服务器强制执行的。如果请求中缺少任何CORS详细信息,服务器会以某种方式阻止请求或拒绝发送响应,这并不是问题所在
相反,当您在服务器上配置CORS支持时,服务器所做的不同只是发送Access Control Allow Origin
响应头和其他CORS响应头
该协议的工作方式是,无论您在服务器端进行什么CORS配置,所有客户端(甚至浏览器)都会一如既往地从服务器获得响应。但区别在于curl
或其他本机应用程序或后端服务器端编程环境(如PHP)不会阻止您的客户端代码访问响应,如果它不包含Access Control Allow Origin
响应头。但浏览器会
具体地说,即使您在浏览器devtools中看到来自前端JavaScript代码的跨源请求失败的错误,您仍然能够在浏览器devtools中看到响应
但是,仅仅因为您的浏览器可以看到响应,并不意味着浏览器将向您的前端JavaScript代码公开响应。如果请求发送到的服务器选择允许请求,则浏览器仅将跨源请求的响应公开给在特定源运行的前端代码,方法是使用允许该源的Access Control Allow origin
头进行响应
但是浏览器是唯一能做到这一点的客户端。浏览器是实现CORS协议的唯一客户端curl
或其他本机应用程序或后端服务器端环境(如PHP)不实现CORS协议,因此无法通过在服务器端执行任何CORS配置来阻止来自它们的请求
因此,如果您想阻止非浏览器客户端对资源的请求,则需要使用CORS配置以外的其他配置来执行此操作。Ajax不跨域,出于安全原因,任何主流浏览器都不允许使用此功能。除非您的接口服务器和您的网站具有相同的域,否则我可以通过在域不在我的白名单中时抛出错误并动态设置请求的来源,成功阻止像Postman这样的服务器在我的CORS保护的API路由中向我发送请求
这是我的邮递员,我在其中设置了所有标题,如accesscontrolalloworigin:
邮递员服务器阻止了该请求,并在my live server中抛出错误后返回500内部服务器错误
,如您所见:
将Express/Node.js与cors
2.8.5版一起使用,我的代码如下所示:
const whitelistDomains = [
'http://awesomesite123.com',
'https://localhost:3000',
];
const corsOptions = {
origin: function (origin, callback) {
if (whitelistDomains.includes(origin)) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
},
optionsSuccessStatus: 200, // For legacy browser support
methods: ['GET', 'PUT', 'POST', 'DELETE'],
}
app.use(cors(corsOptions));
这是不适用的,因为这不是通过浏览器完成的,并且CORS策略未得到实施/遵守。