跨子域的跨域资源共享 (CORS)

Posted

技术标签:

【中文标题】跨子域的跨域资源共享 (CORS)【英文标题】:Cross Origin Resource Sharing (CORS) across Subdomains 【发布时间】:2018-05-04 11:07:04 【问题描述】:

假设我在www.example.com (a) 有一个应用程序

如果我的资源位于www.someotherdomain.com (b) 并且我从 (a) 到 (b) 则适用 CORS 规则。

但是,如果我的资源位于 api.example.com (c),那么在从 (a) 到 (c) 发出 AJAX 请求时,人们会期望避免使用 CORS - 但是,我发现情况并非如此。

跨子域发出请求时,CORS 规则仍然适用 - 这是真的吗?

这条规则是否存在(不使用JSONP)?

例如,我无法想象在 www.amazon.comresource.amazon.com 之间发出的所有请求总是 CORS 请求。大规模管理标头和预检请求/响应似乎很乏味且成本​​高昂。

我在这里缺少什么吗?

【问题讨论】:

子域是不同的来源。 CORS 实际上相对容易处理,除非您想对它进行超级具体化,并且只允许它在特定来源的特定端点上使用,但即使这样也不是那么困难。 谢谢。我同意这不是太难,但似乎预检请求会大规模降低性能(假设我的应用程序发出 1000 个请求,忽略由于更改请求架构而导致的性能改进)。这不是一个重要的问题吗? 我不认为每个请求都会发送预检。例如,如果您连续发送一打,则只有一个 【参考方案1】:

CORS 用于一组 protocol:domain:port,或 null,或 *。见https://www.w3.org/TR/cors/#access-control-allow-origin-response-header。

所以您的问题的答案是,是的,CORS 规则仍将适用于您的子域。

【讨论】:

【参考方案2】:

注意 - 您可以使用此处最佳答案中概述的 document.domain 方法从 (c) 到 (a) 进行调用

Ways to circumvent the same-origin policy

【讨论】:

以上是关于跨子域的跨域资源共享 (CORS)的主要内容,如果未能解决你的问题,请参考以下文章

Ajax解决跨域--设置CORS响应头实现跨域

AJAX入门

SpringBoot(十三)CORS方式实现跨域

Nginx解决跨域问题(CORS)

11-6 CORS跨域资源共享解决

11-6 CORS跨域资源共享解决