CORS策略是否会阻止非浏览器请求的资源访问?

Dou*_*ell 5 cors asp.net-core

根据我的理解,使用CORS模块将从Access-Control-Allow-Origin资源中删除标头,导致XmlHttp请求从浏览器失败.

但是,这是否会阻止来自CURL或其他本机应用程序/ Web服务器的Http请求(即通过PHP编写并运行的请求)成功从该资源检索数据?

sid*_*ker 10

但是,这是否会阻止来自CURL或其他本机应用程序/ Web服务器的Http请求(即通过PHP编写并运行的请求)成功从该资源检索数据?

不,它不会阻止任何其他客户端成功检索资源.

CORS协议仅由浏览器强制实施.它不是由服务器强制执行的.事实并非如果请求中缺少任何CORS详细信息,服务器会以某种方式阻止请求或拒绝发送响应.

相反,当您在服务器上配置CORS支持时,服务器执行的所有操作都只是发送Access-Control-Allow-Origin响应头和其他CORS响应头.

协议的工作方式是,无论您在服务器端进行哪种CORS配置,所有客户端 - 甚至是浏览器 - 都会像往常一样继续从服务器获取响应.但不同之处在于,curl或者其他本机应用程序或后端服务器端编程环境(如PHP)如果不包含Access-Control-Allow-Origin响应头,则不会阻止客户端代码访问响应.但浏览器会.

具体来说,即使您在浏览器中发现错误,您的前端JavaScript代码中的跨源请求失败,您仍然可以在浏览器devtools中看到响应.

但仅仅因为您的浏览器可以看到响应并不意味着浏览器会将其暴露给您的前端JavaScript代码.浏览器仅将来自跨源请求的响应暴露给在特定源运行的前端代码(如果请求被发送到opts-in的服务器,以通过响应Access-Control-Allow-Origin允许该源的标头来允许请求).

但浏览器是唯一这样做的客户端.浏览器是唯一实现CORS协议的客户端.curl或其他本机应用程序或后端服务器端环境(如PHP)不实现CORS协议,因此您无法通过在服务器端执行任何CORS配置来阻止来自它们的请求.

因此,如果要阻止来自非浏览器客户端的资源请求,则需要使用CORS配置以外的其他方式执行此操作.