我在域上有一个网页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>
在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
发出请求时,模式将被解析并分组如下:
$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