Da die Verwendung der CORS- und http-Authentifizierung mit AngularJS schwierig sein kann, habe ich die Frage bearbeitet, um eine gelernte Lektion zu teilen. Zuerst möchte ich mich bei igorzg bedanken. Seine Antwort hat mir sehr geholfen. Das Szenario ist das folgende: Sie möchten eine POST-Anforderung mit dem AngularJS $ http-Dienst an eine andere Domäne senden. Es gibt einige knifflige Dinge zu beachten, wenn Sie AngularJS und das Server-Setup erhalten.
Erstens: In Ihrer Anwendungskonfiguration müssen Sie domänenübergreifende Anrufe zulassen
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
app.config(function($httpProvider) {
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;
});
Zweitens: Sie müssen withCredentials: true und Benutzername und Passwort in der Anfrage angeben.
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
$http({
url: 'url of remote service',
method: "POST",
data: JSON.stringify(requestData),
withCredentials: true,
headers: {
'Authorization': 'Basic bashe64usename:password'
}
});
Тhird: Server-Setup. Du musst bereitstellen:
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url.com:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
Für jede Anfrage. Wenn Sie OPTION erhalten, müssen Sie Folgendes bestehen:
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header( "HTTP/1.1 200 OK" );
exit();
}
Die HTTP-Authentifizierung und alles andere kommt danach.
Hier ist ein vollständiges Beispiel für die Verwendung der Serverseite mit PHP.
<?php
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header( "HTTP/1.1 200 OK" );
exit();
}
$realm = 'Restricted area';
$password = 'somepassword';
$users = array('someusername' => $password);
if (isset($_SERVER['PHP_AUTH_USER']) == false || isset($_SERVER['PHP_AUTH_PW']) == false) {
header('WWW-Authenticate: Basic realm="My Realm"');
die('Not authorised');
}
if (isset($users[$_SERVER['PHP_AUTH_USER']]) && $users[$_SERVER['PHP_AUTH_USER']] == $password)
{
header( "HTTP/1.1 200 OK" );
echo 'You are logged in!' ;
exit();
}
?>
In meinem Blog gibt es einen Artikel zu diesem Thema, der hier zu sehen ist .