javascript – CORS – 如果使用Jquery ajax的“withCredentials:true”,服务器如何知道?

我正在框架中实现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标头.

点赞