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
* [email protected] 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
* [email protected] 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
* [email protected] 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
* [email protected] 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
* [email protected] 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 .
Antworten:
Nein, Sie müssen keine Anmeldeinformationen eingeben. Sie müssen Header auf der Clientseite einfügen, z.
Und auf der Serverseite müssen Sie Header einfügen. Dies ist ein Beispiel für nodejs:
quelle
Um eine CORS-Anfrage zu stellen, muss der Anfrage Header hinzugefügt werden, zusammen mit dem gleichen, den er benötigt, um zu überprüfen, ob mode_header in Apache aktiviert ist.
So aktivieren Sie Header in Ubuntu:
Damit der PHP-Server Anfragen unterschiedlicher Herkunft akzeptiert, verwenden Sie:
quelle