首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP AMP表单CORS问题

PHP AMP表单CORS问题
EN

Stack Overflow用户
提问于 2020-01-27 19:21:58
回答 2查看 407关注 0票数 0

页面在单个/相同的域上工作得很好,但在多个/跨域的情况下,它会产生问题。

表单页面

https://example.com

ampform.html

代码语言:javascript
复制
<!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

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2020-01-31 12:44:27

下面的更改对我来说很有效。

.htaccess

代码语言:javascript
复制
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

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2020-01-28 01:57:14

这有安全风险,但请将此文件放在php文件的顶部。

代码语言:javascript
复制
header('Access-Control-Allow-Origin: *');
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59930132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档