作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于 amp-form 的 CORS header 的文档可能会更简单,但我仍然有点不知所措是否正确。
现在,我的表单似乎可以在我自己的网站以及 Google 的 AMP 结果中使用。不过,它在我的开发网站上不起作用;而且我也不确定它是否真的非常安全。这是我目前使用的代码,一个位于 https://podnews.net 上的脚本
这是大量试验和错误的结果,我忍不住认为文档可以更清楚地解决这个问题。
header('Cache-Control: private, no-cache');
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials: true');
header('access-control-expose-headers: AMP-Access-Control-Allow-Source-Origin');
header('AMP-Access-Control-Allow-Source-Origin: https://podnews.net');
header('Content-Type: application/json');
特别是:据我所知,$_SERVER['HTTP_ORIGIN']
可以包含 AMP 缓存。
此处正确的有效值是什么?我如何添加多个值(假设至少有两个 AMP 缓存)?为什么它不能在开发站点上运行,类似于 http://dev.podnews.net (它引发的错误是 CORS 错误,而不是关于使用 HTTP 而不是 HTTPS 的错误)。我如何编写此内容以便所有 AMP 开发人员都能轻松引用?
最佳答案
经过更多的尝试,我认为答案是这里相当笨拙的代码:
header('Cache-Control: private, no-cache');
$thisDomain="https://podnews.net"; // The main production domain
$devDomain="http://dev.podnews.net"; // The development domain
$googleAMPCacheSubdomain=str_replace(".","-",str_replace("-","--",$thisDomain));
//If you use an IDN, you've got more work to do in the above to work out your AMP cache subdomain
//https://github.com/ampproject/amphtml/blob/master/spec/amp-cors-requests.md has details
$validOrigins=array('https://'.$googleAMPCacheSubdomain.'.cdn.ampproject.org','https://cdn.ampproject.org','https://amp.cloudflare.com',$thisDomain,$devDomain);
if (!in_array($_SERVER['HTTP_ORIGIN'],$validOrigins)) {
header('X-Debug: '.$_SERVER['HTTP_ORIGIN'].' is an unrecognised origin');
header('HTTP/1.0 403 Forbidden');exit;
//Stop doing anything if this is an unfamiliar origin
}
if ($_GET['__amp_source_origin']!=$thisDomain AND $_GET['__amp_source_origin']!=$devDomain) {
header('X-Debug: '.$_GET['__amp_source_origin'].' is an unrecognised source origin');
header('HTTP/1.0 403 Forbidden');exit;
//Stop doing anything if this is an unfamiliar source origin
//Note: if using Amazon Cloudfront, don't forget to allow query strings through
}
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin');
header('AMP-Access-Control-Allow-Source-Origin: '.urldecode($_GET['__amp_source_origin']));
header('Content-Type: application/json');
// You're in!
我确实希望这是一个很好的可复制/粘贴答案,其他人可能会觉得有用。辛苦了!
关于cors - 如何在 PHP 中为 amp-form 输出正确的标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47390573/
我是一名优秀的程序员,十分优秀!