wake-up-neo.com

Headersatz Access-Control-Allow-Origin in .htaccess funktioniert nicht

Ich kann nicht herausfinden, warum meine .htaccess - Kopfzeileneinstellungen nicht funktionieren.

Mein .htaccess Dateiinhalt:

Header set Access-Control-Allow-Origin *
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers "*"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Aber wenn ich Header entferne und sie in index.php Hinzufüge, funktioniert alles einwandfrei.

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");

Was vermisse ich?

86
user1401592

Das sollte funktionieren:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
130
imbrizi

Nur zur Veranschaulichung, ich hatte genau dasselbe Problem und keine der Antworten funktionierte.

Ich habe ein Header-Checker-Tool verwendet: http://www.webconfs.com/http-header-check.php

Ich habe mit meiner IP getestet (http://192.0.2.1/upload) und was zurückkam war folgendes:

HTTP/1.1 301 Moved Permanently => 
Date => Sat, 10 Jan 2015 04:03:35 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_Perl/2.0.4 Perl/v5.10.1
Location => http://192.0.2.1/upload/
Content-Length => 380
Connection => close
Content-Type => text/html; charset=iso-8859-1

Es ist eine Umleitung aufgetreten und die AJAX Anfrage berücksichtigt/folgt keine Umleitungen.

Es stellte sich heraus, dass der Schrägstrich am Ende der Domain fehlt ( http://192.0.2.1/upload/)

Ich habe es am Ende noch einmal mit einem Schrägstrich getestet. Fügte auch einen Schrägstrich im Skript hinzu und es funktionierte jetzt.

HTTP/1.1 200 OK => 
Date => Sat, 10 Jan 2015 04:03:53 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_Perl/2.0.4 Perl/v5.10.1
X-Powered-By => PHP/5.3.8
Access-Control-Allow-Origin => *
Access-Control-Allow-Methods => PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Headers => *
Content-Length => 1435
Connection => close
Content-Type => text/html

Verwenden Sie dieses Tool, um zu testen, ob Ihre Header fehlerfrei sind, und um Fehler zu beheben, die auftreten.

19
Miro

Ich habe ein Shared Hosting auf GoDaddy. Ich brauchte auch eine Antwort auf diese Frage, und nachdem ich mich umgesehen hatte, stellte ich fest, dass es möglich ist.

Ich habe eine .htaccess-Datei geschrieben und sie im selben Ordner wie meine Aktionsseite abgelegt. Hier ist der Inhalt der .htaccess-Datei:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "Origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

Hier ist mein Ajax-Anruf:

    $.ajax({
        url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php',  //server script to process data
        type: 'POST',
        xhr: function() {  // custom xhr
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
            }
            return myXhr;
        },
        //Ajax events
        beforeSend: beforeSendHandler,
        success: completeHandler,
        error: errorHandler,
        // Form data
        data: formData,
        //Options to tell JQuery not to process data or worry about content-type
        cache: false,
        contentType: false,
        processData: false
    });

Siehe diesen Artikel als Referenz:

Header-Set Access-Control-Allow-Origin in .htaccess funktioniert nicht

10
TARKUS

Seien Sie vorsichtig bei:

 Header add Access-Control-Allow-Origin "*"

Dies ist überhaupt nicht vernünftig, um jedermann Zugang zu gewähren. Es ist vorzuziehen, nur eine Liste bekannter vertrauenswürdiger Hosts zuzulassen ...

Header add Access-Control-Allow-Origin "http://aaa.example"
Header add Access-Control-Allow-Origin "http://bbb.example"
Header add Access-Control-Allow-Origin "http://ccc.example"

Grüße,

8
Alex

Ich habe die Header des Apache-Moduls a2enmod aktiviert und das Problem wurde behoben.

7
truthblue82

Versuchen Sie dies im .htaccess des externen Stammordners

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Seien Sie vorsichtig bei: Header hinzufügen Access-Control-Allow-Origin "*" Dies ist überhaupt nicht sinnvoll, um allen Zugriff zu gewähren. Ich denke du solltest Benutzer:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "http://example.com"
</IfModule>
3
Vo Quoc Cuong

Ich würde Miros Antwort für den Link zur Header-Checker-Site geben http://www.webconfs.com/http-header-check.php . Es wird jedes Mal eine unangenehme Anzeige eingeblendet, wenn Sie es verwenden. Es ist jedoch sehr nützlich, um das Vorhandensein des Headers "Access-Control-Allow-Origin" zu überprüfen.

Ich lese eine .json-Datei aus dem Javascript auf meiner Webseite. Ich habe festgestellt, dass das Hinzufügen des Folgenden zu meiner .htaccess-Datei das Problem beim Anzeigen meiner Webseite in IE 11 (Version 11.447.14393.0) behoben hat:

<FilesMatch "\.(json)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

Folgendes habe ich auch zu /etc/httpd.conf (Apaches Konfigurationsdatei) hinzugefügt:

AllowOverride All

Die Header-Checker-Site hat überprüft, ob der Header Access-Control-Allow-Origin jetzt gesendet wird (danke, Miro!).

Firefox 50.0.2, Opera 41.0.2353.69 und Edge 38.14393.0.0) rufen die Datei jedoch trotzdem ab, auch wenn ohne den Access-Control-Allow-Origin-Header (Hinweis: Möglicherweise überprüfen sie IP-Adressen, da die beiden von mir verwendeten Domänen auf demselben Server unter derselben IPv4-Adresse gehostet werden.)

Allerdings ignoriert Chrome 54.0.2840.99 m (64-Bit) den Access-Control-Allow-Origin-Header und schlägt dennoch fehl und meldet fälschlicherweise:

In der angeforderten Ressource ist kein 'Access-Control-Allow-Origin'-Header vorhanden. Origin ' {mydomain}' ist daher kein Zugriff gestattet.

Ich denke, das muss eine Art "erstes" sein. IE funktioniert ordnungsgemäß; Chrome, Firefox, Opera und Edge sind alle fehlerhaft; und Chrome ist die schlimmste Ist das nicht das genaue Gegenteil des üblichen Falls?

2
Dave Burton

Nach einem halben Tag ohne Arbeit. Verwenden eines Header-Check-Service, obwohl alles funktioniert hat. Die Firewall bei der Arbeit entfernte sie

0

versuche dies:

<IfModule mod_headers.c>
     Header set Access-Control-Allow-Credentials true
     Header set Access-Control-Allow-Origin "your domain"
     Header set Access-Control-Allow-Headers "X-Requested-With"
</IfModule>

Es ist vorzuziehen, eine Liste bekannter vertrauenswürdiger Hosts zuzulassen.

0
behnam shateri