Hallo,
Da ich nun nach mehreren Tagen auf Google und StackOverflow das ganze nicht lösen konnte wende ich mich nun an die Community im Forum.
Ich arbeite aktuell an einer API für meine Angular-App und habe nun das Problem dass wenn ein "Authorization" Header gesezt ist, ich einen CORS Fehler bekomme.
Wenn ich den Header entferne bekomme ich wie zu erwarten einen 401 Fehler.
CORS habe ich wie folgt eingebaut und funktioniert (ohne Header):
.htaccess
In den PHP Dateien:
Die Console (Firefox) gibt mir folgende Meldung:
Meine erste Vermutung war das im angegebenen API-Key ein Slash enthalten ist, aber funktioniert leider auch nicht wenn ich als Key den Wert "123" angebe.
Anhand der Fehlermeldung vermute ich nun das es daran liegt dass das Preflight OPTIONS-Request keine Header akzeptiert, und habe desshalb mal folgenden Code in die .htacces gepackt um alle Preflight-Request mit dem Statuscode 200 zu beantworten:
Bin über jeden Tipp dankbar.
Da ich nun nach mehreren Tagen auf Google und StackOverflow das ganze nicht lösen konnte wende ich mich nun an die Community im Forum.
Ich arbeite aktuell an einer API für meine Angular-App und habe nun das Problem dass wenn ein "Authorization" Header gesezt ist, ich einen CORS Fehler bekomme.
Wenn ich den Header entferne bekomme ich wie zu erwarten einen 401 Fehler.
CORS habe ich wie folgt eingebaut und funktioniert (ohne Header):
.htaccess
Code:
<IfModule mod_headers.c> Header always set Access-Control-Allow-Origin "*" Header always set Acces-Conrtol-Allow-Methos "GET, POST, PUT, DELETE, OPTIONS" Header always set Access-Conrtol-Allow-Headers "origin, x-request-with, content-type, accept" Header always set Access-Control-Allow-Credentials "true" </IfModule>
PHP-Code:
if(isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 0'); // no cache
}
// Access-Control headers are received during OPTIONS requests
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PATCH");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource. (Grund: Kopfzeile 'authorization' ist aufgrund der Kopfzeile 'Access-Control-Allow-Headers' aus der CORS-Preflight-Antwort nicht zulässig).
Anhand der Fehlermeldung vermute ich nun das es daran liegt dass das Preflight OPTIONS-Request keine Header akzeptiert, und habe desshalb mal folgenden Code in die .htacces gepackt um alle Preflight-Request mit dem Statuscode 200 zu beantworten:
Code:
RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]
Kommentar