是否可以通过使用CNAME记录来允许跨域请求?

时间:2011-12-22 22:44:41

标签: ajax cross-domain cname

我知道有很多跨域问题,但我找不到我想要的东西。

我想从a.com向b.com发出客户端AJAX请求,这显然是不允许的。我想如果我创建了一个b.a.com - > b.com CNAME记录然后浏览器将允许此请求,因为这意味着拥有a.com域名的任何人想要明确允许对b.com的请求,但我仍然得到一个没有的Access-Control-Allow-Origin错误允许请求。是否无法通过CNAME进行此请求?

注意:我无法控制b.com,所以我无法在那里设置标题。

2 个答案:

答案 0 :(得分:10)

没有。 (但我有一个真正的解释)

“跨域请求”的“道路规则”通常由“同源政策”管理(请参阅:The W3C CommentaryWikipediaGoogle Browser Security Handbook,{{ 3}})

W3C明确指出:

  

原点由URL的方案,主机和端口定义。

根据此定义,即使来自foo.combar.foo.com的请求也会被阻止。

在您的示例中,您建议为CNAME bar.foo.com创建一个指向bar.com的{​​{1}}(我假设您有拼写错误)应该允许bar.com的请求通过bar.foo.com。但是,正如我上面所述,即使来自foo.com的请求也会在客户端阻止向bar.foo.com发出HTTP请求。

Mozilla的页面甚至有这个具体的例子:

  

如果协议,Mozilla认为两个页面具有相同的来源,   port(如果指定了一个),并且两个页面的主机相同。该   下表给出了与URL进行比较的示例   Mozilla Developer Network

     

网址|结果|原因

     

http://store.company.com/dir/page.html |成功
  http://store.company.com/dir2/other.html |成功
  http://store.company.com/dir/inner/another.html |失败|不同的协议   https://store.company.com/secure.html |失败|不同的端口    http://news.company.com/dir/other.html |失败|不同主持人

答案 1 :(得分:1)

没有

我从来没有听说过CNAME是解决这个问题的一种方法,所以我认为可以安全地假设它不是解决问题的方法。