我在域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>
答案 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