为啥我的 Access-Control-Allow-Origin 标头的值不正确?

Posted

技术标签:

【中文标题】为啥我的 Access-Control-Allow-Origin 标头的值不正确?【英文标题】:Why does my Access-Control-Allow-Origin header have an incorrect value?为什么我的 Access-Control-Allow-Origin 标头的值不正确? 【发布时间】:2017-07-03 00:37:07 【问题描述】:

我在域 https://imeet.pgi.com 上有一个网页,向另一个域发出 XMLHttpRequest。请求失败并出现以下控制台错误(使用 Chrome 浏览器):

XMLHttpRequest 无法加载 https://pgidrive.com/eloqua/forminator/getForm.php。这 “Access-Control-Allow-Origin”标头有一个值 'https://imeet.pgi.coms' 不等于提供的原点。 Origin 'https://imeet.pgi.com' 因此不允许访问。

请注意,Access-Control-Allow Origin 标头的值为: https://imeet.pgi.coms 以“s”结尾。

为什么我的Access-Control-Allow-Origin 标头有这个不正确的值?

如果可能是某个地方的拼写错误,我会去哪里检查?

更多背景信息:我已经成功地从其他域发出了同样的请求,没有任何问题。我在 pgidrive.com 上的 .htaccess 文件中设置了一个允许的源域列表,其中包括 imeet.pgi.com。

另外,我的 .htaccess 中允许的源域的代码:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?://(www\.)?(agenday.com|imeet.pgi.com|pgi.com|go.pgi.com|staging.pgi.com|imeetlive.pgi.com|globalmeet.pgi.com|latam.pgi.com|br.pgi.com|pgi.ca)$" AccessControlAllowOrigin=$0$1
    Header add Access-Control-Allow-Origin %AccessControlAllowOrigine env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Credentials true
</IfModule>

【问题讨论】:

然后检查那个 htaccess 文件 @hjpotter92 - 我检查了 htaccess,但没有发现问题。我刚刚将我的 htaccess 代码添加到我的帖子中。非常感谢您的关注。 【参考方案1】:

在您的 htaccess 文件中,执行以下操作时:

SetEnvIf Origin "http(s)?://(www\.)?(agenday.com|imeet.pgi.com|pgi.com|go.pgi.com|staging.pgi.com|imeetlive.pgi.com|globalmeet.pgi.com|latam.pgi.com|br.pgi.com|pgi.ca)$" AccessControlAllowOrigin=$0$1

你有AccessControlAllowOrigin=$0$1。这里,$0 表示整个匹配的字符串,$1 表示第一个匹配的组。这里的第一个匹配组是(s)?

当您使用来源发出请求时:https://imeet.pgi.com,模式被解析并分组as follows:

$0 = `https://imeet.pgi.com`
$1 = `s`
$3 = `imeet.pgi.com`

这就是您看到s 字符的原因。

将其更改为(基本上,删除$1):

SetEnvIf Origin "https?://(?:(?:agenday|(?:(?:imeet|go|staging|imeetlive|globalmeet|latam|br)\.)?pgi)\.com|pgi\.ca)$" AccessControlAllowOrigin=$0

【讨论】:

老兄。你是男人。太感谢了!我是正则表达式和模式的新手 - 我知道我还有很多东西要学!

以上是关于为啥我的 Access-Control-Allow-Origin 标头的值不正确?的主要内容,如果未能解决你的问题,请参考以下文章

ABP PUTDELETE请求错误405.0 - Method Not Allowed 因为使用了无效方法(HTTP 谓词) 引发客户端错误 No 'Access-Control-Allow

apache跨域配置

ExpressJS 不同的域名 - CORS

google bigquery 对 firebase 函数的查询

带有远程 URL 的 JSONP 不起作用

如果 CORS 拒绝我的 API 请求并且我不控制服务器,我无能为力吗? [复制]