【问题标题】:Setting CORS on PHP to allow certain domains在 PHP 上设置 CORS 以允许某些域
【发布时间】:2020-11-21 11:48:46
【问题描述】:

我试图让 CORS 在我的 PHP 上工作,但它不工作。我只希望某些域可以访问我的 php 文件。 我看过 Stackoverlflow 上的其他文章(即Cross-Origin Request Headers(CORS) with PHP headers),但由于我的 $SERVER[ORIGIN] 总是返回 null;

这是我的https://dev.mycompany.com/test-cors.php 文件:

 <?

     header("Access-Control-Allow-Origin: https://www.mycompany.com");
     header("Access-Control-Allow-Methods: GET");
     header("Content-Type: application/json; charset=UTF-8");    
     $myObj->name = "John";
     $myObj->age = 30;
     $myObj->city = "New York";

     $myJSON = json_encode($myObj);

     echo $myJSON;

 ?>

我正在尝试使用 ajax 从我的 https://dev.mycompany.com 服务器调用 json.php,以查看是否可以取回 JSON 数据。我原以为会出现错误,但收到了数据已检索警报消息。

这是我从 ajax.js 上的开发服务器调用的 jquery。

     $.ajax({
            url: "test-cors.php",
            type: 'GET',
            dataType: 'json', // added data type
            success: function(data) {
                    alert('data retrieved');

            },
            error: function (jqXHR, textStatus, errorThrown) { 
                alert(textStatus);
            }
    
});

【问题讨论】:

  • 您的 ajax 请求发送到same origin。 CORS 仅适用于跨域。 (因此得名。)

标签: php ajax cors


【解决方案1】:

origin 标头是您的浏览器发送到服务器的标头,指示请求的来源(域)。在您的情况下,test-core.php 与 Ajax 调用位于同一来源(dev.mycompany.com),因此是允许的。 CORS 标头被忽略。当从另一个来源(例如本地主机)执行此请求时,它将失败。

我只希望某些域可以访问我的 php 文件。

请注意,CORS 标头不是指定“访问”某些 url/文件的方法。 Access-Control-Allow-Origin 标头限制 browsers 在某个位置执行对某个 url 的请求(例如,当浏览器在 stackoverflow 上时,您是否允许在 yoursite[.]com 上调用 API。 com)。它与实际的访问管理无关。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2016-05-18
    • 1970-01-01
    • 2020-06-29
    相关资源
    最近更新 更多