CORS是不是在Apache的工作在Heroku

问题描述 投票:1回答:1

我部署与Apache的PHP应用程序启用基本身份验证。

当从本地访问与阿贾克斯,会出现以下错误。

无法加载https://(myapp).herokuapp.com/api.php?mode=xxx:响应预检请求未通过访问控制检查:否“访问控制允许来源”标题存在于所请求的资源。因此,原产地“空”是不允许访问。响应有HTTP状态代码401。

我的.htaccess的设置是这样的。

Header set Access-Control-Allow-Origin "*"
AuthUserFile /app/.htpasswd
AuthType Basic
AuthName "Restricted Access"
Require valid-user

而且,我的计划是这样的。

<button>Go!</button><br>
<textarea name="" id="result" cols="100" rows="10"></textarea>

<script src="./jquery-3.3.1.min.js"></script>
<script src="./jquery.base64.min.js"></script>
<script>
    var uri = "https://(myapp).herokuapp.com/api.php?mode=xxx";

    $('button').on('click', function() {
        $.ajax({
            url: uri,
            success: function(response) {
                $('textarea').val(response);
            },
            error: function(xhr, textStatus, errorThrown) {
                console.log(textStatus + " : " + errorThrown);
            },
            beforeSend: function(xhr) {
                var credentials = $.base64.encode("user:pass");
                xhr.setRequestHeader("Authorization", "Basic " + credentials);
            }
        });
    });
</script>

如果禁用基本身份验证,数据可以得到成功。

所以,我认为这是Apache的问题,而不是PHP。

php apache heroku cors basic-authentication
1个回答
0
投票

我有一个类似的问题,这个问题是我没有正确响应CORS OPTIONS请求。我用的是heroku/php buildpack,而不是Apache,并使用Silex的部署我的应用程序。你的情况可能与其他的选择而变化。

不管 - 我不得不增加一个选项的路线,然后发回一个HTTP 200响应之前添加相应的头文件。请参见下面的代码。我已经离开我的记录,显示了请求和响应头以供参考。希望能帮助到你。

$app->options('/mv', function() use($app) {
    $app['monolog']->addDebug(">>> >>> >>> BEGIN RECEIVED HEADERS >>> >>> >>> ");
    foreach (getallheaders() as $name => $value) {
        $app['monolog']->addDebug(">>> $name: $value");
    }   
    $app['monolog']->addDebug(">>> >>> >>> END RECEIVED HEADERS >>> >>> >>> ");
    $app['monolog']->addDebug(">>> >>> ");

    header("Access-Control-Allow-Origin: *");
      header('Access-Control-Max-Age: 1000');
      header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization');
    header('HTTP/1.1 200');

    $app['monolog']->addDebug(">>> >>> ");
    $app['monolog']->addDebug(">>> >>> >>> BEGIN HEADERS SENT BACK >>> >>> >>> ");
    foreach (headers_list() as $name => $value) {
        $app['monolog']->addDebug(">>> $name: $value");
    }   
    $app['monolog']->addDebug(">>> >>> >>> END HEADERS SENT BACK >>> >>> >>> ");

    return json_encode(array());
});
© www.soinside.com 2019 - 2024. All rights reserved.