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

时间:2017-02-14 16:08:42

标签: regex .htaccess cors cross-domain

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

  

XMLHttpRequest无法加载   https://pgidrive.com/eloqua/forminator/getForm.php。该   'Access-Control-Allow-Origin'标头有一个值   'https://imeet.pgi.coms'不等于提供的原点。   因此,不允许原点“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 %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Credentials true
</IfModule>

1 个答案:

答案 0 :(得分:2)

在您的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