CORS政策会阻止非浏览器请求访问资源吗?

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

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


鸿蒙传说
浏览 801回答 3
3回答

翻过高山走不出你

但是,这是否阻止了来自CURL或其他本机应用程序/ Web服务器的Http请求(即通过PHP编写并运行的请求)成功从该资源检索数据?不,这不会阻止任何其他客户端成功获取资源。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不是跨域的,出于安全原因,任何主流浏览器都不允许使用Ajax。除非您的界面服务器和网站具有相同的域

哆啦的时光机

Curl和其他非浏览器的HTTP客户端必须忽略Access-Control-Allow-Origin标头。请参阅 如何使用cURL调试CORS请求?
打开App,查看更多内容
随时随地看视频慕课网APP