无法加载资源:服务器响应状态为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标题报告
我们如何确保其正常运作。
应用所有标签。 https://github.com/ampproject/amphtml/blob/master/spec/amp-cors-requests.md
答案 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);