AMP访问控制允许源原点标题问题

时间:2017-09-17 14:02:21

标签: javascript forms mobile amp-html

无法加载资源:服务器响应状态为500(内部服务器错误) cdn.ampproject.org/v0.js:68响应必须包含AMP-Access-Control-Allow-Source-Origin标头 Yd @ cdn.ampproject.org/v0.js:68 cdn.ampproject.org/v0.js:68表单提交失败:错误:响应必须包含AMP-Access-Control-Allow-Source-Origin标题报告

enter image description here

我们如何确保其正常运作。

应用所有标签。 https://github.com/ampproject/amphtml/blob/master/spec/amp-cors-requests.md

3 个答案:

答案 0 :(得分:8)

请尝试使用以下代码

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: ". str_replace('.', '-','https://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://example.com/thankyou.amp.html");
        header("Access-Control-Expose-Headers: AMP-Redirect-To, AMP-Access-Control-Allow-Source-Origin"); 
        echo json_encode(array('successmsg'=>'data post'));
        exit;
}
  

请确保域名网址 https

https://example.com/替换为您想要的网址

答案 1 :(得分:1)

尽管OP使用PHP,但我还是在这里发布我的JavaScript代码。

对于 node express 服务器,您可以使用提供中间件的amp-toolbox-cors

const express = require('express');
const ampCors = require('amp-toolbox-cors');

const app = express();

// That's it!
app.use(ampCors());
...

默认情况下,AMP CORS中间件仅允许来自https://cdn.ampproject.org/caches.json上列出的AMP缓存的请求(添加了bing-amp.com)。

所有其他来源将收到403回复。

因此,对于 localhost 或开发人员测试,你们可能还希望添加以下内容:

app.use(ampCors({
  verifyOrigin: false
}));

对于那些想更深入研究的人,这里是有关如何遵守AMP CORS的官方文档的链接。

答案 2 :(得分:0)

这可以节省一两次头痛。我转了一圈很久;

请注意,在上述公认的答案中,如果https://example.com恰好是一个带有连字符的域名,则字符串替换将不会产生预期的结果。

例如,https://www.my-domain.com需要转换为https:// www-my--domain-com,而不会。

header("Access-Control-Allow-Origin: ". str_replace('.', '-','https://www.my-domain.com') .".cdn.ampproject.org");

需要成为

header("Access-Control-Allow-Origin: https://www-my--domain.com.cdn.ampproject.org");

所以

$h = 'https://www.my-domain.com';
$h = str_replace('-', '--',$h);
$h = str_replace('.', '-',$h).'.cdn.ampproject.org';

然后

header("Access-Control-Allow-Origin: " . $h);