我正在框架中实现CORS(跨源资源共享).
我知道当使用Jquery的ajax(…)创建XMLHttpRequest请求并且withCredentials属性为true时,服务器必须响应这两件事:
> Access-Control-Allow-Credentials:true
> Access-Control-Allow-Origin:[THE_DOMAIN]
服务器无法使用通配符响应,Access-Control-Allow-Origin:*:doesn’t work!
我的问题:我怎么知道在服务器上使用了withCredentials:true,所以我不使用通配符?
我比较了使用withCredentials时发送的标头:false和使用withCredentials:true时它们是相同的!
因此,如果我想在客户端请求时允许凭据,那么它是否意味着我不能使用Access-Control-Allow-Origin:*?
最佳答案
So, if I do want to allow credentials when the client requests it, does it mean I can’t, ever, use Access-Control-Allow-Origin:*?
是.
Access-Control-Allow-Origin:*的重点在于它可以让您轻松地授予对每个网站的访问权限.它可以让你说“这些数据是公开的,任何人都可以访问它”.
如果您需要凭据来访问资源,那么说“这些数据是公开的,任何人都可以访问它”是没有意义的.
如果您要授予访问每个网站的权限,那么登录到您网站的某个人访问的每个网站都可以从中读取数据(实际上将其公开).
因此,您需要拥有允许访问数据的受信任站点的白名单,然后在明确授予对它们的访问权限之前检查Origin标头.