3 回答
TA贡献1875条经验 获得超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配置以外的方法来进行请求。
TA贡献1779条经验 获得超6个赞
Curl和其他非浏览器的HTTP客户端必须忽略Access-Control-Allow-Origin标头。请参阅 如何使用cURL调试CORS请求?
- 3 回答
- 0 关注
- 800 浏览
添加回答
举报