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

AMP-Access-Control-Allow-Source-Origin is not equal to the current

好吧,几天来我一直在为这个问题苦苦思索,在大量谷歌搜索之后(现在我搜索任何与此相关的内容时都有很多紫色链接)我几乎被难住了。该表单适用于我们的域和 AMP 域,所以也许我应该克服它并顺其自然。但与此同时,我希望它是正确的,所以希望有人能在这里帮助我。

我读了AMP CORS documentation几遍,我觉得一切都很好。

在提交表单时,我们所有的表单 return 都出现以下错误。在视觉上 URL 看起来是一样的。我已将它们粘贴到一个纯文本编辑器中,在那里看起来也不错。

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

我们是 运行 我们的 htaccess 文件中的 headers,代码如下。

<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=[=11=]
Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e 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)。在这里加倍 headers 因为否则它似乎会抛出 JSON 语法错误,即使在测试之后上述错误来自 htaccess 文件。我还尝试从 htaccess 中删除 headers 并将它们仅包含在 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:我更新了我的代码以包含我注释掉的其他尝试。

This header allows the specified source-origin to read the authorization response. The source-origin is the value specified and verified in the "__amp_source_origin" URL parameter (for example, "https://publisher1.com").

该值必须是允许的来源,而不是您提供的 comma-separated 允许来源列表。