仅当 url 以 www 为前缀时才会发生 CORS 错误

Rem*_*_rm 7 javascript xmlhttprequest cors web

我目前遇到一个关于 CORS(跨源资源共享)的问题,奇怪的是,只有当我使用 www.url 前缀时,才会出现这种情况。

\n\n

例如,当我使用网址“ http://example.com/index ”访问我的网站时,一切正常并且所有资源都已正确加载。但是,当我尝试使用网址“ http://www.example.com/index ”访问我的网站时,我收到错误Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://example.com/index. (Reason: CORS header \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 missing).

\n\n

我尝试加载的资源是一个 XML 文件,使用以下代码:

\n\n

\r\n
\r\n
function loadXML()\r\n{\r\n    var xhttp = new XMLHttpRequest();\r\n    xhttp.onreadystatechange = function() {\r\n        if (this.readyState == 4 && this.status == 200) {\r\n            xmlData = xhttp.responseXML;\r\n            initStartShot();\r\n        }\r\n    };\r\n    xhttp.open("GET", "http://example.com/XML/someXMLfile.xml", true);\r\n    xhttp.send();\r\n}
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

我的所有资源文件都与我的页面位于同一域中。

\n\n

我已经四处寻找与我相关的问题,但大多数都是关于 CORS 的一般问题,以及如何让它发挥作用。但事实上我没有任何 CORS 问题,没有“www”前缀,这似乎不适用于我的问题。

\n\n

不幸的是,我无法分享网址本身,但如果您需要任何其他信息,我将尽力提供。

\n\n

任何帮助将不胜感激。

\n\n

~雷米

\n

Que*_*tin 9

example.com并且www.example.com是不同的起源。要成为同源,URL 方案、主机名和端口必须相同。www.example.com并且example.com不是相同的主机名。

默认情况下,JavaScript 允许访问同源数据。

您收到有关缺少 CORS 权限的错误,因为您尝试从一个源访问另一个源。

有多种方法可以解决此问题。

  • 首先不要使用多个来源。选择example.com和之一www.example.com作为规范。配置您的 HTTP 服务器以发出从非规范服务器到规范服务器的 301 重定向。
  • 使用相对 URL。您的绝对 URL 意味着当您位于错误的来源时,它仍然会尝试访问另一个来源。使用相对 URL 将使请求保持与页面相同的来源。
  • 配置您的服务器以使用 CORS 标头向其他源授予权限。

我推荐第一个选项。