JavaScript Cors Fehler => No 'Access-Control-Allow-Origin' header is present V2

Status
Für weitere Antworten geschlossen.

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Moin zusammen,

ich hatte vor einigen Wochen bereits einmal ein Thread zu diesem Thema erstellt, nun allerdings einmal die Library ausgetauscht und nochmal selber einige Sachen geändert. Dennoch komme ich bei meinem Thema nicht weiter...

Um euch nochmal auf den Stand zu bringen, um was es geht:
ich bekomme leider eine ungewöhnliche Fehlermeldung... Ich habe eine Ajax Request geschrieben, der auf einer Subdomain, nennen wir sie mal subdomain.example.com, funktioniert. Dieser Ajax macht einen Request an backend.example.com und dieser funktioniert auch. Hier mal der Code für diesen Request:

Ich habe nun, da ich Laravel als PHP Framework nutze, auf dieses CORS Plugin umgeschaltet:
https://github.com/barryvdh/laravel-cors

So sieht mein Code aus:
Code:
    var ajaxArray = {
        "fromDate": from,
        "toDate": to,
        "table": "no",
        "userID": 20
    };

console.log(ajaxArray);

jQuery.ajax({
    url: ("https://backend.example.com/api/v1/leads/show"), 
    type: "POST",
    data: ajaxArray,
    crossDomain: true,
    headers : {
    "Authorization": "Basic " + btoa("api@example.com" + ":" + "123456"), 
    "Accept": "application/json"
    },
    error: function() { alert("No"); },
    success: function(result){
        alert("Working");
    });
}});

Nun möchte ich aber einen Request von der Hauptdomain, also example.com, machen, doch das funktioniert leider nicht. Hier der Request:

Code:
    var ajaxArray = {
        "fromDate": from,
        "toDate": to
        };

    console.log(ajaxArray);

    jQuery.ajax({
        url: ("https://backend.example.com/api/v1/leads/showAdmin"), 
        type: "POST",
        data: ajaxArray,
        crossDomain: true,
        headers : {
        "Authorization": "Basic " + btoa("api@example.com" + ":" + "123456"), 
        "Accept": "application/json"
        },
        error: function() { alert("Error"); },
        success: function(result){
            alert("Working");
        });
    }});

Die Fehlermeldung ist Folgende:
Failed to load https://backend.example.com/api/v1/leads/showAdmin: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://example.com' is therefore not allowed access.

Aber in der Fehlermeldung steht ja, dass die Origin bekannt ist. Nämlich example.com, von der ja auch der Request aus funktioniert. Was mich eben wundert ist, dass es von der Subdomain aus funktioniert, aber nicht von der Hauptdomain aus... Wir kann ich das beheben? Hatte jemand schon mal diese Fehler?

Ich arbeite mit einer PHP Laravel 5.5 API und einem CORS Plugin für Laravel, welche Folgenden Einstellungen besitzt, die unter der Config in Laravel so in der cors.php abgespeichert ist:
Code:
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Laravel CORS
    |--------------------------------------------------------------------------
    |
    | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
    | to accept any value.
    |
    */

    'supportsCredentials' => false,
    'allowedOrigins' => ['*'],
    'allowedOriginsPatterns' => [],
    'allowedHeaders' => ['*'],
    'allowedMethods' => ['*'],
    'exposedHeaders' => [],
    'maxAge' => 0,

];

Ihr seht, 'allowedOrigins' => ['*']

Das hier sind meine Anfragen und Antworten von den Ajax Request der Hauptdomain, auf welcher es leider nicht funktioniert:
Code:
General:
Request URL:https://backend.example.com/api/v1/leads/showAdmin
Request Method:OPTIONS
Status Code:200 
Remote Address:94.130.239.164:443
Referrer Policy:no-referrer-when-downgrade

Response Header:
allow:POST
cache-control:private, must-revalidate
content-length:0
content-type:text/html; charset=UTF-8
date:Mon, 05 Mar 2018 13:52:41 GMT
expires:-1
pragma:no-cache
server:nginx
status:200
x-powered-by:PleskLin
x-powered-by:PHP/7.2.2

Request Header:
:authority:backend.example.com
:method:OPTIONS
:path:/api/v1/leads/showAdmin
:scheme:https
accept:*/*
accept-encoding:gzip, deflate, br
accept-language:de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
access-control-request-headers:authorization
access-control-request-method:POST
origin:https://example.com
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36

In der Datei App\Http\Kernel.php habe ich ebenfalls, wie ganz unten auf der Seite vom CORS Plugin CSRF Tokens deaktiviert und auch für die Middelware die HandleCors registriert:

Code:
/**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
		\Barryvdh\Cors\HandleCors::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            //\App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

Was denkt Ihr, woran liegt es? Ich finde den Fehler leider nicht und verstehe auch nicht, wieso es auf der einen Unterseite funktioniert, allerdings auf der Hauptdoamin nicht?

Ich würde mich sehr über Hilfe freuen.
Mit freundlichen Grüßen und Vielen Dank
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben