it-swarm.com.de

Firefox 'Cross-Origin Request blockiert' trotz Kopfzeilen

Ich versuche, eine einfache Cross-Origin-Anfrage zu erstellen, und Firefox blockiert sie durchgehend mit diesem Fehler: 

Herkunftsübergreifende Anforderung blockiert: Dieselbe Ursprungsrichtlinie verhindert das Lesen der Remote-Ressource unter [url]. Dies kann behoben werden, indem Sie die Ressource in dieselbe Domäne verschieben oder CORS aktivieren. [url] 

Es funktioniert gut in Chrome und Safari. 

Soweit ich das beurteilen kann, habe ich alle korrekten Header auf meiner PHP gesetzt, damit dies funktioniert. Hier ist, womit mein Server antwortet 

HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html

Ich habe versucht, Angular, jQuery und ein grundlegendes XMLHTTPRequest-Objekt zu verwenden.

var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()

... und es funktioniert in jedem Browser außer Firefox. Kann mir jemand helfen?

80
Godwhacker

Es stellte sich heraus, dass dies nichts mit CORS zu tun hat - es war ein Problem mit dem Sicherheitszertifikat. Irreführende Fehler = 4 Stunden Kopfschmerzen.

92
Godwhacker

Ich stellte fest, dass mein Problem darin bestand, dass der Server, an den die Cross-Anfrage gesendet wurde, über ein Zertifikat verfügte, das nicht vertrauenswürdig war. 

Wenn Sie mit https eine Verbindung zu einer domänenübergreifenden Domäne herstellen möchten, müssen Sie zuerst eine Ausnahme für dieses Zertifikat hinzufügen. 

Sie können dies tun, indem Sie den blockierten Link einmal besuchen und die Ausnahme hinzufügen.

15
Cracker0dks

Ich habe nach 2 Tagen eine Lösung gefunden :(.

Wichtiger Hinweis: Wenn Sie auf eine Anfrage mit Berechtigung antworten, muss der Server Geben Sie eine Domäne an und können keine Platzhalter verwenden.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials

8
Hoàng Quân

Nur ein Wort der Warnungen. Ich bin endlich mit Firefox und CORS umgegangen.

Die Lösung für mich war dieser Beitrag

Setzen von CORS (Cross-Origin Resource Sharing) für Apache mit korrekten Antwort-Headern, die alles durch | ermöglichen Benjamin Horn

Allerdings hat sich Firefox nach dem Setzen dieser Header auf dem Apache-Server (im Ordner .htaccess) wirklich, sehr seltsam verhalten.

Ich habe viel console.log("Hi FF, you are here A") etc hinzugefügt, um zu sehen, was los war. 

Zuerst sah es so aus, als hinge es an xhr.send(). Aber dann entdeckte ich, dass es zu dieser Aussage nicht kam. Ich habe einen anderen console.log direkt davor platziert und bin nicht dorthin gelangt - obwohl zwischen dem letzten console.log und dem neuen nichts war. Es hat gerade zwischen zwei console.log angehalten.

Zeilen neu anordnen, löschen, um zu sehen, ob sich in der Datei ein seltsames Zeichen befindet. Ich habe nichts gefunden.

Beim Neustart von Firefox wurden die Probleme behoben.

Ja, ich sollte einen Fehler einreichen. Es ist nur so seltsam, dass Sie nicht wissen, wie Sie es reproduzieren sollen. 

NOTICE: Oh, ich habe nur die Header always set-Teile gemacht, nicht den Rewrite*-Teil!

4
Leo

Ich bin auf diese Frage gestoßen, als ich herausfand, dass Anfragen in Firefox mit der folgenden Nachricht blockiert wurden:

Grund: Die CORS-Anforderung war nicht erfolgreich

Nachdem ich mir die Haare ausgerissen hatte, stellte ich fest, dass eine neu installierte Firefox-Erweiterung, Privacy Badger, die Anfragen blockierte.

Wenn Sie zu dieser Frage kommen, nachdem Sie sich den Kopf zerkratzt haben, überprüfen Sie, welche Erweiterungen Sie installiert haben, um festzustellen, ob sie Anforderungen blockieren.

Weitere Informationen finden Sie unter Grund: CORS-Anforderung war nicht erfolgreich auf MDN.

3
Matthew Bonner

Einfach hinzufügen 

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

in die Datei .htaccess im Stammverzeichnis der Website, mit der Sie eine Verbindung herstellen möchten.

2
Gareth

Wenn Sie kein "echtes" Zertifikat haben (und daher ein selbstsigniertes verwenden), können Sie in FireFox folgende Schritte ausführen:

Options > Privacy & Security > (scroll to the bottom) View Certificates > Add Exception.

Tragen Sie dort den Ort ein, zB: https: //wwww.myserver: myport

2
Hypenate

Versuchen Sie dies, es sollte Ihr Problem lösen

  1. Fügen Sie in Ihrer config.php www pre in Ihre domain.com hinzu. Zum Beispiel:

    HTTP define('HTTP_SERVER', 'http://domain name with www/');
    HTTPS define('HTTPS_SERVER', 'http://domain name with www/');
    
  2. Fügen Sie dies Ihrer .htaccess-Datei hinzu

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]
    

Ich hatte ein ähnliches Problem und ich denke, es ist gültig, registriert zu werden, wie ich es behoben habe:

Ich habe ein System, das im Grunde genommen auf Symfony 3 aufgebaut ist. Aus Gründen des Selbstlernens und der Leistung habe ich mich dazu entschlossen, einige Skripte mit GoLang zu schreiben, auch mit einer API mit öffentlichem Zugriff.

Die My Go-API erwartet Json-Formatparameter und gibt auch eine Antwort im Json-Format zurück

Um diese GoApi zu nennen, die ich benutze, meistens $ .ajax (jQuery) Der erste Test war eine Täuschung: das (un) berühmte Popup "Cross-Origin Request Blocked"! Dann habe ich versucht, "Access-Control-Allow-Origin: *" auf Apache conf, htaccess, php, javascript und irgendwo auf google einzustellen!

Aber sogar derselbe frustrierende Fehler !!!

Die Lösung war einfach: Ich musste "POST" -Anfragen stellen, statt "GET".

Um das zu erreichen, musste ich sowohl GoLang als auch JavaScript anpassen, um GET! Sobald dies erledigt ist, wird für mich keine ursprungsübergreifende Anfrage mehr blockiert !!!

Ich hoffe es hilft

PS:

Ich verwende Apache und Vhost, auf dem Directory Block, den ich habe

  Header always set Access-Control-Allow-Origin "*"
  Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"

Denken Sie daran: "*" bedeutet, dass Sie Anfragen von jedermann annehmen werden !!! In meinem Fall ist dies in Ordnung, da es sich um eine öffentliche API handelt

PS2: Meine Header

Antwort-Header

Access-Control-Allow-Credentials    true
Access-Control-Allow-Headers    Authorization
Access-Control-Allow-Methods    GET, POST, PUT
Access-Control-Allow-Origin http://localhost
Content-Length  164
Content-Type    application/json; charset=UTF-8
Date    Tue, 07 May 2019 20:33:52 GMT

Kopfzeilen anfordern (469 B)

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Content-Length  81
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Host    localhost:9003
Origin  http://localhost
Referer http://localhost/fibootkt/MY_app_dev.php/MyTest/GoAPI
User-Agent  Mozilla/5.0 (Macintosh; Intel …) Gecko/20100101 Firefox/66.0
0
Diego Favero

Für mich stellt sich heraus, dass ich den Access-Control-Allow-Origin-Antwortheader auf einen bestimmten (und den korrekten) Host.com festgelegt hatte, aber er musste stattdessen als http://Host.com zurückgegeben werden. Was macht Firefox? Es schluckt die GET-Anfrage im Hintergrund und gibt einen Status 0 an die XHR zurück, ohne dass Warnungen an die Javascript-Konsole ausgegeben werden, während es bei ähnlichen Fehlern mindestens etwas sagen würde. Ai ai.

0
rogerdpack

Überprüfen Sie für die Nachwelt auch Serverprotokolle, um zu sehen, ob die angeforderte Ressource eine 200 zurückgibt.

Ich stieß auf ein ähnliches Problem, bei dem alle richtigen Header in der Ajax-Anforderung vor dem Flug zurückgegeben wurden, aber der Browser meldete, dass die tatsächliche Anfrage aufgrund fehlerhafter CORS-Header blockiert wurde.

Es stellte sich heraus, dass die angeforderte Seite wegen fehlerhaftem Code einen 500-Fehler zurückgab, jedoch nur, wenn sie über CORS abgerufen wurde. Der Browser (sowohl Chrome als auch Firefox) hat versehentlich gemeldet, dass der Access-Control-Allow-Origin-Header fehlt, anstatt zu sagen, dass die Seite eine 500 zurückgegeben hat.

0
Jack Stouffer

Überprüfen Sie zum Debuggen nach Möglichkeit die Serverprotokolle. Firefox gibt CORS-Fehler aus einer Reihe von Gründen in der Konsole zurück.

Einer der Gründe ist auch das uMatrix-Plugin (und auch NoScript und ähnliches).

0
johndodo