通过 www 打开网站时 AWS 服务器上的 Access-Control-Allow-Origin 错误

Access-Control-Allow-Origin error on AWS server when website is opened through www

在浏览器中,当我通过键入 仅 mywebsite.com 打开我的网站时,ajax 请求成功命中了我的其余网络服务。但是当我键入 www.mywebsite.com 时,我收到错误消息,因为 -XMLHttpRequest 无法加载 http://mywebsite.com/path Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.mywebsite.com' 因此不允许访问。

Jqueryajax请求是-

return $.ajax({ url: "http://mywebsite.com/path/", type: "POST",

网站部署在AWS服务器,下面是CORS配置

 <?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
    <ExposeHeader>x-amz-request-id</ExposeHeader>
    <ExposeHeader>x-amz-id-2</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我找不到解决方案,因为添加 www 会产生问题。

事实证明您的网站不在 Amazon S3 上,所以我不确定您为什么要展示在 S3 存储桶上编辑 CORS 配置的示例。

您的站点实际上 运行 在 EC2 服务器上的 Apache Coyote 上。

这里的实际问题出在您的 javascript 上。在文件 MarketProfile.js 中,您使用十六进制对一些字符串进行了最低限度的混淆。

return $.ajax({url:"
\x68\x74\x74\x70\x3A\x2F\x2F\x62\x72\x65\x61\x6B\x69\x6E\x67\x74\x72\x61\x64
\x65\x2E\x63\x6F\x6D\x2F\x72\x65\x73\x74\x2F\x72\x65\x73\x74\x2F\x63\x6F\x6D
\x62\x69\x6E\x65\x64

这相当于:

http://breakingtrade.com/rest/rest/combined

当您从主网站加载时,它不是 cross-origin。当您从 www 站点加载它时,它是一个 cross-origin 请求,因为主机名不同。

解决这个问题应该很简单,只需让 url 成为一个简单的绝对路径,只为这个字符串指定 '/rest/rest/combined',而不是在字符串的开头包含 'http://breakingtrade.com'

否则,您将需要弄清楚如何制作您的服务器或至少制作此特定资源 return CORS headers...但是如果您这样做,当然,您除非您希望其他人使用您的服务器将数据添加到 他们的 网站(如果您只允许任何网站访问,这可能会更容易发生)发出 cross-origin 请求)。