【问题标题】:AMP Access Control Allow Source Origin header IssueAMP 访问控制允许 Source Origin 标头问题
【发布时间】:2018-02-26 03:24:14
【问题描述】:

如何解决以下错误;

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

遵循AMP GitHub Page on CORS 的所有说明。

下面是我在服务器端的 PHP 代码和浏览器控制台中的错误截图;

【问题讨论】:

标签: php cors amp-html


【解决方案1】:

这可能会减轻一两次头痛。我绕了好久;

请注意,在上面公认的答案中,如果 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);

【讨论】:

    【解决方案2】:

    虽然 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 的官方文档的链接。

    【讨论】:

      【解决方案3】:

      请尝试以下代码

      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;
      }
      

      请确保域 url 应该是 https

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

      【讨论】:

      • 在 IIS 服务器中进行了一些更改。感谢您的支持。
      • 真的需要使用https吗?
      猜你喜欢
      • 2018-03-27
      • 2019-07-09
      • 2022-06-25
      • 2018-01-23
      • 2017-08-31
      • 1970-01-01
      • 2019-02-01
      • 2019-12-20
      • 2020-10-31
      相关资源
      最近更新 更多