跨子域的跨域资源共享 (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.com
和 resource.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)的主要内容,如果未能解决你的问题,请参考以下文章