PHP AMP форма CORS Issue - PullRequest
       0

PHP AMP форма CORS Issue

0 голосов
/ 27 января 2020

Страница работает нормально на одном / том же домене, но в случае мульти / кросс-домена это создает проблему. enter image description here

Форма страницы

https://example.com

ampform. html

<!doctype html>
<html amp>
<head>
<meta charset="utf-8">
<title>amp-form</title>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>
<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.2.js"></script>
<link rel="canonical" href="https://amp.dev/documentation/examples/components/amp-form/index.html">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
</head>
<body>
<h2 class="sample-heading">AMP Form Submission</h2>
<form target="_top" method="post" name="apiForm" id="apiForm" action-xhr="https://different.com/ampl/amp_thankyou.php"  
custom-validation-reporting="show-all-on-submit">
   <input type="text"
    id="as-you-go-name"
    name="name"
    placeholder="Name..."
    required>
  <span visible-when-invalid="valueMissing"
    validation-for="as-you-go-name"></span>
  <input type="submit" name="submitlogin" value="Submit" />
</form>
</body>
</html>

Спасибо Страница

https://different.com

amp_thankyou. php

if(!empty($_POST)){
        $domain_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]";
        header("Content-type: application/json");
        header("Access-Control-Allow-Credentials: true");
        header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Origin: ". str_replace('.', '-','https://www.example.com') .".cdn.ampproject.org");
        header("AMP-Access-Control-Allow-Source-Origin: " . $domain_url);
        header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
        header("AMP-Redirect-To: https://www.different.com/amp_thankyou.php");
        header("Access-Control-Expose-Headers: AMP-Redirect-To, AMP-Access-Control-Allow-Source-Origin"); 
        echo json_encode(array('successmsg'=>'data post'));
        exit;
}

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Ниже изменения работают на меня.

.htaccess

SetEnvIf Origin "^http(s)?://(.+\.)?(www\.example.com|www\.different.com)$" origin_is=$0 
Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is

Страница благодарности

https://different.com

amp_thankyou. php

 header("Content-type: application/json");
    header("Access-Control-Allow-Credentials: true");
    $valid_cors = array("www.example.com","www.different.com");
    if(in_array($_SERVER['HTTP_ORIGIN'],"https://".$valid_cors)) {
        header('Access-Control-Allow-Origin: https://{$valid_cors}', false);
        header("Access-Control-Allow-Methods: GET, POST, PUT");
        header("Access-Control-Allow-Headers: Content-Type");
    }

    header('AMP-Access-Control-Allow-Source-Origin: '.'http://'. $_SERVER['HTTP_HOST']);
    header("AMP-Redirect-To: https://www.different.com/amp_thankyou.php");
    header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin, AMP-Redirect-To");
0 голосов
/ 27 января 2020

Это угроза безопасности, но поместите ее в верхнюю часть вашего php файла

header('Access-Control-Allow-Origin: *');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...