Ich baute eine API mit dem SLIM Micro-Framework. Ich habe eine Middleware eingerichtet, die die CORS-Header mit dem folgenden Code hinzufügt.CORS Post Request schlägt fehl
class Cors{
public function __invoke(Request $request, Response $response, $next){
$response = $next($request, $response);
return $response
->withHeader('Access-Control-Allow-Origin', 'http://mysite')
->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
}
Für mein Front-End verwendete ich VueJS. Ich habe VueResource eingerichtet und eine Funktion mit dem folgenden Code erstellt.
register (context, email, password) {
Vue.http({
url: 'api/auth/register',
method: 'POST',
data: {
email: email,
password: password
}
}).then(response => {
context.success = true
}, response => {
context.response = response.data
context.error = true
})
}
In Chrom wird der folgende Fehler in der Konsole protokolliert.
XMLHttpRequest cannot load http://mysite:9800/api/auth/register. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mysite' is therefore not allowed access.
Seltsamerweise funktionieren GET-Anfragen perfekt.
Danke !!! Große Antwort, Kumpel. Es funktioniert jetzt perfekt. Ich hätte es ohne dich nicht geschafft. –
@geggleto Nach meinem Wissen habe ich herausgefunden, dass Browserclients für CORS ein Mandat haben, eine Anfrage vor dem Flug von OPTIONS zu machen, und sie validieren die Antwortheader, die Sie oben angegeben haben. Bedeutet dies, dass das Deaktivieren von OPTIONS und das Nichtsetzen dieser Header zu Fehlern führen? Und wir müssen für solche Anfragen jedesmal response.send (200); – xploreraj