AMP Access Control Allow Source Origin header Issue

前端 未结 3 527
北荒
北荒 2020-12-09 22:38

How can I resolve the error below;

Failed to load resource: the server responded with a status of 500 (Internal Server Error) cdn.ampproject.org/v0.

相关标签:
3条回答
  • 2020-12-09 23:17

    Please try with following code

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

    Please make sure that domain url should be https

    Replace https://example.com/ to your desired url

    0 讨论(0)
  • 2020-12-09 23:18

    Although OP uses PHP, I'm posting here for my javascript peeps.

    For node express server, you can use amp-toolbox-cors, which provides middleware.

    const express = require('express');
    const ampCors = require('amp-toolbox-cors');
    
    const app = express();
    
    // That's it!
    app.use(ampCors());
    ...
    

    By default, the AMP CORS middleware will only allow requests from AMP Caches listed on https://cdn.ampproject.org/caches.json (with the addition of bing-amp.com).

    All other origins will receive a 403 response.

    So for localhost or dev testing, you guys will probably want to also add the following:

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

    For those who want to take a deeper dive, here's a link to offical docs on how to comply with AMP CORS.

    0 讨论(0)
  • 2020-12-09 23:37

    This may save a head ache or two. I went round in circles quite a while;

    Be aware in the recognized answer above that if https://example.com happens to be a domain name with hyphens in it, the string replacement will not give the desired result.

    For example https://www.my-domain.com needs to be turned into https://www-my--domain-com and it won't be.

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

    Needs to be

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

    So

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

    then

    header("Access-Control-Allow-Origin: " . $h);
    
    0 讨论(0)
提交回复
热议问题