AMP-Access-Control-Allow-Source-Origin 不等于当前

Posted

技术标签:

【中文标题】AMP-Access-Control-Allow-Source-Origin 不等于当前【英文标题】:AMP-Access-Control-Allow-Source-Origin is not equal to the current 【发布时间】:2019-10-10 23:25:10 【问题描述】:

好吧,几天来我一直在反对这个,经过广泛的谷歌搜索(现在我搜索任何有关此的内容时有很多紫色链接),我非常难过。该表单适用于我们的域和 AMP 域,所以也许我应该克服它并让它成为现实。但与此同时,我希望它是正确的,因此希望有人可以在这里帮助我。

我已经阅读了几次AMP CORS documentation,我觉得一切都很好。

在提交表单时,我们所有的表单都会返回以下错误。从视觉上看,URL 看起来是一样的。我已将它们粘贴到纯文本编辑器中,那里也一切正常。

由于此错误,我们的表单在技术上会在提交时抛出错误消息。我们现在刚刚翻转了消息,所以会弹出一个错误作为成功,这可能不是最大的,好像它应该正确成功它会抛出一个错误消息。

我们正在运行我们的 htaccess 文件中的标头,下面的代码。

<IfModule mod_headers.c>
Header set Access-Control-Allow-Credentials "true"
#Header set Access-Control-Allow-Origin "static.craigmanufacturing.com"
#Header set Access-Control-Allow-Origin "https://www-craigattachments-com.cdn.ampproject.org"
#Header set Access-Control-Allow-Origin "https://www-craigattachments-com.amp.cloudflare.com"
SetEnvIf Origin "https://(static.craigmanufacturing.com|www-craigattachments-com.cdn.ampproject.org|www-craigattachments-com.amp.cloudflare.com|https://cdn.ampproject.org)$" AccessControlAllowOrigin=$0$1
Header set Access-Control-Allow-Origin %AccessControlAllowOrigine env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Source-Origin "https://www.craigattachments.com"
Header set Access-Control-Expose-Headers AMP-Access-Control-Allow-Source-Origin
Header set AMP-Access-Control-Allow-Source-Origin "https://www.craigattachments.com"
</IfModule>

有人对为什么我们可能会收到我可能遗漏的错误有任何想法吗?您可以在此处试用我们的联系表格:https://www.craigattachments.com/contact-us - 所有消息都会发送到只有我可以访问的收件箱,因此无需担心点击它。

如果需要,我会很乐意提供更多详细信息,因为我确信我可能忘记包含一些关键细节,因为此时我的大脑对这个问题感到很困惑。

编辑:这里也是发送表单背后的 php(删除了我的一些细节和 html)。在这里加倍标头,因为否则它似乎会引发 JSON 语法错误,即使在测试上述错误来自 htaccess 文件之后也是如此。我还尝试从 htaccess 中剥离标题并将它们仅包含在 PHP 中。

<?php

header("Access-Control-Allow-Headers:Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token");
header("Access-Control-Allow-Methods:POST, GET, OPTIONS");
header("Access-Control-Allow-Origin:".$_SERVER['HTTP_ORIGIN']);
header("Access-Control-Expose-Headers:AMP-Access-Control-Allow-Source-Origin");
//header("AMP-Access-Control-Allow-Source-Origin:https://".$_SERVER['HTTP_HOST']);
//header("AMP-Access-Control-Allow-Srouce-Origin:https://www.craigattachments.com");
header("AMP-Access-Control-Allow-Source-Origin:".$_REQUEST['__amp_source_origin']);
header("Content-Type: application/json");
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_STRICT);

set_include_path("." . PATH_SEPARATOR . ($UserDir = dirname($_SERVER['DOCUMENT_ROOT'])) . "/pear/share/pear" . PATH_SEPARATOR . get_include_path());
require_once "Mail.php";
require_once "Mail/mime.php";

$host = "###";
$username = "###";
$password = "###";
$port = "###";
$to = "###";
$email_from = "###";
$email_name = $_POST['fullname'];
$email_subject = $_POST['subject'];
$email_body = $_POST['message'];
$email_address = $_POST['sender_email'];

?>

<?php

$html_email = '';
$crlf = "\n";


echo json_encode(array($email_subject, $email_address, $html_email, $email_name));

$headers = array ('From' => $email_name . "<" . $email_from . ">", 'To' => $to, 'Subject' => $email_subject, 'Reply-To' => $email_address);
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));

$mime = new Mail_mime($crlf);
$mime->setHTMLBody($html_email);

$html_email = $mime->get();
$headers = $mime->headers($headers);

list($user,$domain) = explode('@', $email_address);

$mail = $smtp->send($to, $headers, $html_email);

?>

Edit2:我更新了我的代码以包含我注释掉的其他尝试。

【问题讨论】:

【参考方案1】:

此标头允许指定的 source-origin 读取授权响应。 source-origin 是在“__amp_source_origin”URL 参数中指定并验证的值(例如,“https://publisher1.com”)。

该值必须是允许的来源,而不是您提供的允许来源的逗号分隔列表。

【讨论】:

我已尝试对 URL 进行硬编码并在 PHP 中使用 $_SERVER['HTTP_HOST'] 对其进行设置。它一直在 htaccess 中被硬编码,“Access-Control-Allow-Origin”的 SetEnvIf 语句之前也被硬编码过。仍然产生相同的错误。除非我误解了你的回答…… 更新了我的代码以包含我的其他被注释掉的尝试。 抱歉,您可能从我的评论中收到了所有通知。我的大脑终于启动并意识到您在说什么,而我只是错误地阅读了错误。 “URL、URL 与 URL”是问题所在,我需要弄清楚为什么它会在逗号分隔的列表中将 URL 加倍。 通过意识到我可能还有另一个问题在起作用,设法摆脱了重复的标题,将您的答案标记为正确,因为这在技术上就是我的问题所在。核对我的 PHP 中的重复标头设置,现在导致表单成功/错误消息不显示。所以我猜那个......

以上是关于AMP-Access-Control-Allow-Source-Origin 不等于当前的主要内容,如果未能解决你的问题,请参考以下文章