2012-08-11 75 views
0

我在那里我发展我的REST端点网站:即使这两个URL都来自XXXX.com,为什么仍然收到405错误?

https://prefixone.somesite.com

而且我还有一个网站,我发展我的UI框架:

https://prefixtwo.somesite.com

我可以成功登录并在IE中获得200响应。在FF和Chrome中,我得到了“405不允许的方法”。 Chrome会说“的XMLHTTPRequest无法加载XXXXXXXXXXX鸡舍的情况较为清淡。原产XXXXXXXXXXX没有被允许访问控制允许来源。

两个站点都在somesite.com

仍然没有这种情况?有资格作为XSS在你的代码

+0

很确定我在MDN上看到了这个解决方法。 – 2012-08-11 22:15:01

+1

这不是XSS。这将是[相同的原产地政策](https://en.wikipedia.org/wiki/Same_origin_policy)。 – icktoofay 2012-08-11 22:18:22

+0

感谢您的强大解答Fabricio。 好的 - 但是你怎么称呼它呢? XSS来自同一个域名?我一直试图解决这个问题。我的代码在IE中运行良好 - 但是当我尝试从同一个根网址的一个前缀到另一个前缀时,FF和Chrome(需要Web开发工具)对我诅咒。 – jake 2012-08-11 22:18:45

回答

2

你的问题是“为什么我仍然会收到405,即使这两个网址都是XXXX.com?”,但事实上,你的网址是而不是

xxx.yyyy.comzzz.yyyy.com是不一样的域。他们可能会分享他们的名字的重要部分,但他们不一样。

这是因为完全可以让域内子域的所有者由完全独立的人来操作。考虑uk.com。该域名的所有者出售其中的第三级域名,作为标准英国国家级域名co.uk的竞争对手。

xxx.uk.comzzz.uk.com的站点是完全不同的站点,您不希望前者能够从后者加载内容而不违反相同的源策略规则。

浏览器不知道哪些域名会执行此操作,哪些不会执行此操作,因此它可以安全地使用,并假定任何两个子域名可以由不同的人操作。

即使yyyy.comwww.yyyy.com也不认为是同一件事。

我希望能回答你的问题。

至于怎样做它....

1)把一切都放到同一个子域。将网站分成多个子网域的最常见原因是为了提高性能,但除非您使用Google或Facebook,否则这不太可能对您的性能至关重要,并且您可能首先做的其他事情可能会更有帮助。此外,新的SPDY协议(很快演变成HTTP v2)将使该技术过时。

2)如果您必须将其拆分到多个子域中,您可能需要使用可放置在每台服务器上的crossdomain.xml file来给它们明确的权限来访问彼此的内容。

0

基本上你需要运行在JavaScript如下:

document.domain = "somesite.com"; 

这会告诉该部分应该没关系的浏览器中,同源策略的目的,是somesite.com不是前缀部分。

在Google上查找“文档域”以获取更多信息。

0

相同的原产地政策限制了这一点。正如名字所暗示的那样,它可以与起源一起使用,而不是域名。起源是完整的域名+协议+端口号。因此,即使在同一主机上运行的两个页面如果位于不同的端口或协议上也无法通信。

如果您计划只支持较新的浏览器,请考虑添加x-access-control标头。 如果您需要支持旧浏览器,请查看easyXDM。

相关问题