AMP-Access-Control-Allow-Source-Origin не равен текущему - PullRequest
0 голосов
/ 24 мая 2019

Хорошо, я несколько дней бьюсь головой об этом, и после интенсивного поиска в Google (там много фиолетовых ссылок, когда я сейчас что-то ищу по этому поводу), я в значительной степени озадачен.Форма работает как с нашего домена, так и с AMP, так что, может быть, я должен просто преодолеть это и позволить этому быть.В то же время, я хочу, чтобы это было правильно, так что, надеюсь, кто-то может помочь мне здесь.

Я прочитал документацию AMP CORS несколько раз, и все кажется мне хорошим.

При отправке формы все наши формы возвращают ошибку, указанную ниже.Визуально URL выглядят одинаково.Я вставил их в простой текстовый редактор, и там тоже все хорошо.

enter image description here

В результате этой ошибки наши формы технически выдают ошибкусообщение при отправке.Мы только что перевернули сообщения, поэтому ошибка появляется как успешная, что, вероятно, не самое большое, так как если это должно произойти должным образом, это выдаст сообщение об ошибке.

Мы запускаем заголовки изнаш файл 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 %{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)за отправку формы, а также.Здесь вдвое больше заголовков, потому что в противном случае, похоже, выдается синтаксическая ошибка 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 Ответ

1 голос
/ 24 мая 2019

Этот заголовок позволяет указанному источнику-источнику прочитать ответ авторизации.Источник-источник - это значение, указанное и проверенное в параметре URL-адреса "__amp_source_origin" (например, "https://publisher1.com").

. Значение должно быть разрешенным источником, а не разделенным запятыми спискомразрешенное происхождение, которое вы предоставляете.

...