使用CORS,为什么服务器会声明哪些客户端可以信任它,而不是客户端声明他们信任哪些服务器?

时间:2016-08-31 10:01:46

标签: html ajax cors trust

有一些我从未真正理解的Cross Origin Resource Sharing (CORS),即使用跨源HTTP请求,客户端不能决定它想要信任哪个服务器;相反,服务器声明(在Access-Control-Allow-Origin响应头中)一个或多个特定客户端(起源)信任它。如果服务器表明客户端信任服务器,则启用CORS的浏览器将仅提供服务器对应用程序的响应。这似乎是在两个HTTP方之间建立信任关系的相反方式。

对我来说更有意义的是一种类似于以下的机制:客户端声明它信任的起源列表;例如,通过<meta allow-cross-origin="https://another-site:1234"/>中的一些虚构的<head>元素。 (当然,浏览器必须确保这些元素是只读的,不能通过脚本删除,修改或扩充。)

我对CORS的误解是什么?为什么客户端的可靠来源声明不起作用?为什么服务器要确认哪些客户端(起源)可以信任其响应?谁真的受到CORS的保护?它是保护服务器还是客户端?

(这些是很多问题。我希望很明显,我并不期待对这些问题的答案,而只是一个指出我的根本误解的答案。)

1 个答案:

答案 0 :(得分:0)

客户与此无关。使用CORS标头,您告诉客户端我信任哪些其他服务器。那些人可以分享你的资源和客户不会介意。

例如,如果你有两个域名告诉客户,那么让你的资源被你的第二个网站使用,你不要说我相信你是一个客户。

所以你要保护服务器,而不是客户端。您不希望世界上任何地方托管的脚本都可以访问AJAX API端点。

客户没有任何收获/损失。它只是对服务器的保护,因为使用AJAX所有URL都清晰可见,如果没有这种保护,任何人都可以继续使用你的API运行他们的前端,只有服务器必须输掉这个以便他们决定谁可以使用他们的资源。