Javascript PHP与基本身份验证
我知道有很多关于这个话题的问答,到目前为止还没有什么适合我的 我使用Javascript/XMLHttpRequest从我的PC向我的服务器(Ubuntu/Apache/PHP7.4)发出跨站点HTTP请求: 我的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'] : '*';
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配置出现问题,请尝试将标头更改为标头(“访问控制允许来源:”)代码>