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

Javascript 为什么即使两个URL都来自XXXX.com,我仍然会收到405个错误?,javascript,jquery,xss,Javascript,Jquery,Xss,我有一个站点,我正在该站点上开发REST端点: 我还有另一个网站,我正在开发我的UI框架: 我可以成功登录并在IE中获得200响应。在FF和Chrome中,我得到“405方法不允许”。Chrome通过说“XMLHTTPRequest无法加载XXXXXXXXXX。访问控制允许源不允许源XXXXXXXXXX”,进一步说明了这种情况 这两个网站都在somesite.com上 这种情况仍然符合XSS吗?基本上在代码中,您需要在JavaScript中运行以下内容: document.domain =

我有一个站点,我正在该站点上开发REST端点:

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

我可以成功登录并在IE中获得200响应。在FF和Chrome中,我得到“405方法不允许”。Chrome通过说“XMLHTTPRequest无法加载XXXXXXXXXX。访问控制允许源不允许源XXXXXXXXXX”,进一步说明了这种情况

这两个网站都在somesite.com上


这种情况仍然符合XSS吗?

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

document.domain = "somesite.com";
这将告诉浏览器,出于同源策略的目的,重要的部分是
somesite.com
而不是前缀部分


请在Google上查找“document domain”了解更多信息。

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

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

您的问题是“为什么即使两个url都是XXXX.com格式的,我仍然会收到405?”,但事实上,您的url不是来自同一域的

xxx.yyyy.com
zzz.yyy.com
不是同一个域。它们可能共享其名称的很大一部分,但它们不相同

这是因为域内的子域所有者完全可以由完全独立的人来操作。请考虑<代码> UK.COM < /代码>。该域的所有者将其内部的第三级域作为标准的英国国家级域的竞争对手。

xxx.uk.com
zzz.uk.com
上的站点是完全不同的站点,您不会期望前者能够从后者加载内容而不违反同一原产地政策规则

浏览器不知道哪些域会这样做,哪些不会这样做,因此它很安全,并假设任意两个子域可以由不同的人操作

即使是
yyyy.com
www.yyyy.com
也不被认为是同一件事

我希望这能回答你的问题

至于怎么办

1) 将所有内容放在同一子域上。将站点拆分为多个子域的最常见原因是为了性能,但除非您操作的是Google或Facebook,否则这不太可能对您的性能至关重要,而且您可能还可以先做其他更有帮助的事情。此外,新的SPDY协议(即将演变为HTTP v2)将使该技术过时


(二)如果您必须将其拆分到多个子域,您可能需要考虑使用一个,您可以将其放置在每台服务器上,为它们提供访问彼此内容的显式权限。

我很确定我在MDN上看到了一个解决方法。这不是XSS。这将是一个。感谢Fabrico的可靠回答。好的-但是您怎么称呼它来自同一个域的s?XSS?我已经用谷歌搜索了我的屁股试图解决这个问题。我的代码在IE中运行良好-但是FF和Chrome(web开发工具所需的)当我试图在同一个根url上从一个前缀转到另一个前缀时,你在骂我。@jake:你尝试过搜索
访问控制允许源代码吗?
?我刚搜索过并找到了,这看起来应该对你有帮助。下面是该解决方法的总结版本:(右下表),但如果您控制了这两个域,则最好设置为让其他子域访问您的REST子域。