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

Why do I still receive 405 errors even though both URLs are from XXXX.com?

本文关键字:com 错误 XXXX URL 两个 为什么      更新时间:2023-09-26

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

https://prefixone.somesite.com

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

https://prefixtwo.somesite.com

我可以成功登录并在IE中获得200响应。在FF和Chrome中,我得到一个"405方法不允许"。Chrome通过说"XMLHTTPRequest无法加载XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX源 xxxxxx 是访问控制-允许-源不允许的。

这两个网站都在 somesite.com

这种情况是否仍然符合XSS的条件?

您的问题是"为什么即使两个网址都是表单 XXXX.com,我仍然会收到 405?",但实际上,您的 URL 不是来自同一个域。

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) 如果必须将其拆分到多个子域中,则可能需要考虑使用跨域.xml文件(可以放置在每个服务器上)来授予它们访问彼此内容的显式权限。

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

document.domain = "somesite.com";

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

在谷歌上查找"文档域"了解更多信息。

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

如果您打算仅支持较新的浏览器,请考虑添加 x-access-control 标头。如果您需要支持较旧的浏览器,请查看easyXDM之类的浏览器。