Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP与基本身份验证_Javascript_Php_Basic Authentication - Fatal编程技术网

Javascript PHP与基本身份验证

Javascript PHP与基本身份验证,javascript,php,basic-authentication,Javascript,Php,Basic Authentication,我知道有很多关于这个话题的问答,到目前为止还没有什么适合我的 我使用Javascript/XMLHttpRequest从我的PC向我的服务器(Ubuntu/Apache/PHP7.4)发出跨站点HTTP请求: 我的PHP脚本发送的标题: function print_headers($content_type) { $referer = $_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '*';

我知道有很多关于这个话题的问答,到目前为止还没有什么适合我的

我使用Javascript/XMLHttpRequest从我的PC向我的服务器(Ubuntu/Apache/PHP7.4)发出跨站点HTTP请求:

我的PHP脚本发送的标题:

function print_headers($content_type) {
       $referer = $_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '*';
       
       if (substr($referer, strlen($referer) - 1) == '/') {
           $referer = substr($referer, 0, strlen($referer) - 1); 
       }
       
       header("Access-Control-Allow-Origin: " . $referer);
       header("Access-Control-Allow-Credentials: true");
       header("Access-Control-Allow-Methods: GET");
       header("Access-Control-Allow-Headers: authorization,content-type");
       header($content_type);
}
它在没有基本身份验证的情况下工作,对于基本身份验证,我无法从PHP_Auth_USER和PHP_Auth_PW获取用户名/密码(它们是空的):

$username=$\u服务器['PHP\u AUTH\u USER']

$password=$_服务器['PHP_AUTH_PW']

通常建议在Apache配置或htaccess中使用此重写规则:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
在PHP中:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
它不起作用。我的站点的Apache配置:

<Directory "/var/www/my.site.com/">
    RewriteEngine on
    #RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
    RewriteBase /
    RewriteRule ^(?!admin).*$ index.php
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
    SSLOptions +StdEnvVars
    SSLRequireSSL
</Directory>

重新启动发动机
#重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION},L]
重写基/
重写规则^(?!admin).*$index.php
选项索引跟随符号链接
允许超越所有
要求所有授权
发展+标准
SSLRequireSSL

有什么建议吗?

您是否尝试将标题添加到xhr请求中?比如:

client.setRequestHeader("Authorization", "Basic " + btoa("username:password"));

您是否尝试将标头添加到xhr请求中?比如:

client.setRequestHeader("Authorization", "Basic " + btoa("username:password"));

我添加了这一行,Chrome说:“已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:它没有HTTP ok状态”然后服务器端的CORS配置出现问题,尝试将标头更改为
标头(“访问控制允许来源:”)我添加了这一行,Chrome说:“已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:它没有HTTP ok状态”然后服务器端的CORS配置出现问题,请尝试将标头更改为
标头(“访问控制允许来源:”)