Ich habe eine API, die Base64-String in Bild konvertiert und das Bild in Tomcat Server schreibt. Das Bild schreibt erfolgreich nach dem Aufrufen der API, gibt aber den Fehler beim Abrufen des gleichen Bildes folgt:
"Kein 'Access-Control-Allow-Origin'-Header ist auf dem angeforderten Header vorhanden Ressource. Herkunft ist daher nicht erlaubt. XMLHttpRequest kann Ссылка nicht laden. Nein Der 'Access-Control-Allow-Origin'-Header ist auf dem angeforderten Header vorhanden Ressource.
Mein Code ist wie folgt:
%Vor%Und web.xml ist:
%Vor%Und meine tokenFilter-Klasse ist:
%Vor%Sie müssen sich Ihre Front-End-Seite (XMLHttpRequest) ansehen, um das Problem zu beheben, anstatt auf der Tomcat-Seite.
Dieser Artikel über die Verwendung von CORS wird Ihnen viel Aufschluss geben, um die Ursache herauszufinden.
Es gibt einige Regeln, die zu beachten sind:
Diese Frage [Wie benutzt man einen CORS-Proxy, um "Keine Access-Control-Allow-Origin-Header" -Probleme zu umgehen] wird hier beantwortet: Ссылка
CORS-Sicherheit - Universal Erlauben
- Einstellung der 'Access-Control-Allow-Origin'-Kopfzeile auf *
- Macht den Inhalt effektiv zu einer öffentlichen Ressource, die Zugriff von jeder Domäne ermöglicht.
Szenarien:
- Ein Angreifer kann Daten von einer Intranetsite stehlen, die diesen Header auf * gesetzt hat, indem er einen Benutzer dazu verleitet, eine von einem Angreifer kontrollierte Site aufzusuchen das Internet.
- Ein Angreifer kann über den Browser eines Opfers Angriffe auf andere Remote-Apps durchführen, wenn das Opfer zu einer von einem Angreifer kontrollierten Website navigiert.
Ich habe hier eine Antwort gegeben: Ist dieser CORS-Handler sicher? Sie können schau hier über CORS nach. Es wird dir mehr klären.
CORS Probleme? Verwenden Sie einen Proxy und folgen Sie den Regeln. Indem Sie Ihre Kopfzeile ändern, entfernen Sie die Sicherheit, die eingerichtet wurde, um eine bestimmte Art von Angriff zu vermeiden. Das ist eine schlechte Idee, wenn Sie etwas tun, das sicher sein muss.
Bei einem Proxy können Sie die Anfrage abfangen und alles in der Kopfzeile ändern, die Sie benötigen, und den Antwort-Header bei Bedarf neu schreiben, ohne dass ein Risiko entsteht.
Von Ihrer Fehlermeldung " Ссылка " ist offensichtlich etwas mit der URL nicht in Ordnung. Bitte senden Sie den Code für die Anfrage.
@SkyWalker stimmt mit seiner Antwort. Ich vermute, sobald Sie uns den Rest des Codes liefern, wird es offensichtlich, dass sich die Domäne oder das Protokoll und die Domäne ändern. Wenn dies der Fall ist und Sie sich nicht verwundbar machen wollen, führen Sie einfach einen Proxy durch, der das gültige SSL-Zertifikat am Proxy beendet. (nicht implizieren, dass Sie den Verkehr zu den Upstream nicht sichern sollten)
Nginx funktioniert gut für diese Art von Aufgabe. Aber wählen Sie Ihren Proxy .. Es gibt eine Menge von ihnen da draußen.
Wenn ein XMLHttpRequest
Probleme verursacht, dann benutze es nicht, sondern denke nur daran, die Daten (mit HttpURLConnection
) in ein lokales Bytearray zu laden. Dekodiere (zeige) nun das Bild, wie es von einer lokalen Variablen geladen wurde (zB: ein Byte-Array), um CORS zu vermeiden.
Ich bin auch an eine URL wie http://host:port/address/
gewöhnt, aber Ihre ist witten als http://:port//
, so verstehe ich nicht, wie Sie auf einen Web (http) Server zugreifen können, indem Sie nur einen Port und ohne Server verwenden Adresse. Das sollte einen URL-Fehler verursachen, aber Sie müssen das Ziel der Datei irgendwie erreichen, da CORS zufällig die Medien schützt ...
Der folgende Code könnte es wert sein, in einem leeren / neuen Testprojekt zu versuchen:
(PS: Kein testbarer Link wie http://server:port/tmpFiles/image.jpg
, also wie gezeigt)
Und die damit verbundenen Importe:
%Vor%