【问题标题】:Access-Control-Allow-Origin error on AWS server when website is opened through www通过 www 打开网站时 AWS 服务器上的 Access-Control-Allow-Origin 错误
【发布时间】:2026-01-19 19:00:01
【问题描述】:

当我通过键入 only mywebsite.com 打开我的网站时,在浏览器中,ajax 请求成功地访问了我的 rest 网络服务。但是当我输入 www.mywebsite.com 时,我会收到错误,因为 -XMLHttpRequest 无法加载 http://mywebsite.com/path 对预检请求的响应未通过访问控制检查:没有 'Access-Control-请求的资源上存在 Allow-Origin' 标头。因此不允许访问 Origin 'http://www.mywebsite.com'。

Jquery ajax 请求是-

返回 $.ajax({ 网址:“http://mywebsite.com/path/”, 类型:“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 会产生问题。

【问题讨论】:

  • “网站部署在AWS服务器上,”你说。根据您的 CORS 配置,当您说“AWS 服务器”时,您实际上是在谈论 Amazon S3。但如果这是真的,那么这两个主机名 - 有和没有 www - 就不能轻易地从同一个 S3 存储桶中提供,所以很难猜测你的实际设置(我们需要它,以便查明问题。除非您可以更详细地解释 两个 主机名是如何工作的,否则最好的办法可能是向我们提供您网站的域名,以便我们了解它是如何构建的。
  • @Michael-sqlbot 是的,我说的是 amazon-s3。网站名称是 brokentrade.com。如果你做 www.breaktrade.com 并从下拉列表中选择,你会收到错误。让我知道如果您需要任何其他亚马逊配置。

标签: amazon-web-services amazon-s3 cors no-www preflight


【解决方案1】:

事实证明您的网站不在 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

当您从主网站加载此内容时,它不是跨域的。当您从 www 站点加载它时,它是一个跨域请求,因为主机名不同。

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

否则,您需要弄清楚如何让您的服务器或至少此特定资源返回 CORS 标头...但是如果您这样做,当然,您需要选择允许的来源,除非您希望其他人使用您的服务器将数据添加到他们的网站(如果您只允许任何网站发出跨域请求,这可能会更容易发生)。

【讨论】:

  • 是的,它的 EC2,我认为 S3 上的策略会影响 EC2,抱歉我对 AWS 的了解很少。非常感谢,它现在可以工作了。
最近更新 更多