为什么即使两个URL都来自XXXX.com,我仍然会收到405错误?

时间:2012-08-11 22:13:58

标签: javascript jquery xss

我有一个网站,我正在开发我的REST端点:

https://prefixone.somesite.com

我还有另一个网站,我正在开发我的UI框架:

https://prefixtwo.somesite.com

我可以成功登录并在IE中获得200响应。在FF和Chrome中,我得到了“405方法不允许”。 Chrome通过说“XMLHTTPRequest无法加载XXXXXXXXXXX来解决这个问题。”Access-Control-Allow-Origin不允许使用Origin xxxxxxxxxxx。

这两个网站都在somesite.com上

这种情况是否仍然符合XSS的要求?

3 个答案:

答案 0 :(得分: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(可以放置在每台服务器上),以便为他们提供访问彼此内容的明确权限。

答案 1 :(得分:0)

基本上在您的代码中,您需要在JavaScript中运行以下内容:

document.domain = "somesite.com";

这将告诉浏览器,出于同源策略的目的,应该重要的部分是somesite.com而不是前缀部分。

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

答案 2 :(得分:0)

相同的原产地政策限制了这一点。顾名思义它适用于起源,而不是域。原点是完整的域名+协议+端口号。因此,即使在同一主机上运行的两个页面在不同的端口或协议上也无法通信。

如果您计划仅支持较新的浏览器,请查看添加x-access-control标头。 如果您需要支持旧浏览器,请查看类似easyXDM的内容。