gra*_*avi 5 php lighttpd http cors angularjs
我的场景由两个webserver组成,一个是本地的,一个是远程的.
本地Web服务器(Apache)处理一个Web应用程序,我想在其中向远程Web服务器(Lighttpd)发出ajax请求.
Ajax请求使用angularjs $ http.
var req = {
method: 'POST',
url: 'http://url/myphp.php',
headers: {
'Authorization': 'Basic ' + btoa('username:password'),
'Content-Type': 'application/x-www-form-urlencoded'
},
xhrFields: {
withCredentials: true
},
crossDomain: true,
data: xmlString
}
$http(req).then(function () {
console.log("OK!");
});
Run Code Online (Sandbox Code Playgroud)
远程php脚本是:
<?php
echo "You have CORS!";
?>
Run Code Online (Sandbox Code Playgroud)
不幸的是我有一个
401 Unhauthorized
XMLHttpRequest cannot load http://url/myphp.php. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8888' is therefore not allowed access. The response had HTTP status code 401.
Run Code Online (Sandbox Code Playgroud)
远程Web服务器具有.htpasswd身份验证模式启用和配置的CORS请求.
关注一个lighttpd.conf
setenv.add-response-header = ( "Access-Control-Allow-Origin" => "*" )
Run Code Online (Sandbox Code Playgroud)
因为您正在进行跨域 POST,所以 Angular 会发出预检 OPTIONS 请求,以在进行 POST 之前检查 Access Origin 标头。浏览器中的 NET 选项卡将确认这一点。您的服务器对 OPTIONS 请求的响应不佳,因此 Angular 拒绝进行 POST。
如果你用POSTMAN POST到你的服务器就一切OK了吗?
我相信可以将 Angular 配置为不发出飞行前请求。
或者,将服务器配置为正确响应 OPTIONS 请求,特别是返回正确的访问源标头以响应 OPTIONS 请求。(OPTIONS 只是想查明您的服务器是否设置了这些标头,如果没有,那为什么还要费心进行 POST 呢?)
希望这些信息能为您指明正确的方向。