Standortübergreifende Aufrufe ohne JSONP

8

Ich habe eine Anwendung, in der das Frontend mit HTML, CSS und Javascript-Code erstellt wird. Backend wird mit Core Java, Restlet erstellt.

Nun ist das eigentliche Problem Frontend und Backend, beide werden auf diff-Servern mit Diff-Ports sein. wie, Frontend ist eingeschaltet: http://clientLookup (nur zum Beispiel) Und das Backend ist aktiviert, http://lcgrke:8080

Jetzt, da ich die Server- oder Ruheanrufe von Frontend über Ajax Request oder jQuery Ajax senden werde, bekomme ich das Cross-Side-Scripting-Problem (SOP - same origin policy). Ich verstehe nicht, wie ich das umgehen soll.

JSONP kann eine der Optionen sein, aber es funktioniert nur für GET-Typ-Aufrufe, aber in meiner Anwendung werde ich GET / POST-Anfragen haben. Außerdem werden einige URLs des Servers nicht JSONP-fähig sein (fragt mich nicht warum, akzeptiert einfach, dass sie nicht editierbar sind), also scheint JSONP keine bessere Option zu sein.

Kann mir bitte jemand erklären, wie ich dieses Problem umgehen werde?

    
vbjain 25.07.2013, 20:41
quelle

5 Antworten

1

Ich hatte das gleiche Problem vor nicht allzu langer Zeit. Sie können PHP auf Ihrem Frontend-Server installieren und den AJAX-Aufruf an ein PHP-Skript auf diesem Server senden. Es gibt mehrere HTTP-Bibliotheken für PHP (cURL ist die beliebteste), die Sie dann verwenden können, um eine HTTP-Anfrage an Ihren Backend-Server zu stellen. Im Grunde können Sie ein PHP-Skript auf Ihrem Frontend-Server schreiben, um als Mittelsmann zu fungieren.

    
shadowfox 19.09.2013 14:35
quelle
0

Der moderne Weg Cross-Site-Anfragen zu bearbeiten ist CORS anstelle von JSONP , obwohl Sie wissen müssen, welche Browser CORS unterstützen.

Sie können CORS mit fast modernen Browsern (IE10, FF, Chrome, Safari, Opera) verwenden, aber nicht mit IE9 / 8.

Mit IE9 / 8 können Sie eine andere Technik namens XDomainRequest verwenden , aber Sie müssen es über JSNI implementieren.

Das Ziel der Verwendung von CORS gegenüber JSONP ist, dass Sie auf Ihrer Serverseite einfach einen Filter hinzufügen und alles sofort funktionieren sollte (RPC, RF, usw.).

Um CORS in gwt zu verwenden, können Sie diese Seite in der Website gwtquery , in der Sie ein Filterbeispiel haben. Auf dieser Seite haben Sie auch nützliche Informationen über jsonp und wie man gwtquery ajax verwendet, was den gwt RequestBuilder-Weg vereinfacht.

    
Manolo Carrasco Moñino 26.07.2013 08:57
quelle
0

Wenn Sie PHP verwenden und die Bibliothek php_culr verfügbar haben, möchten Sie vielleicht den Ursprung des Kreuzes für den Server nutzen. Sie können hier ein Beispiel sehen: Ссылка oder Sie können die Funktion file_get_contents verwenden und die geposteten Parameter serialisieren oder einfach die get-Parameter übergeben will (wenn nötig).

Hoffe, das hilft.

    
Charlie Affumigato 06.08.2013 14:57
quelle
0

Ben Alman hat ein einfaches Proxy-Skript, das ich als vorübergehende Lösung für diese Art von Situation benutzt habe.

Grundsätzlich werden GET- und POST-Anfragen mit curl weitergeleitet.

Ссылка

%Vor%

Dieser Code wird aus dem ursprünglichen PHP kopiert, aber es ist nur ein Teil des Codes. Es veranschaulicht die Lösung.

    
Richard Kenny 10.09.2013 16:22
quelle
0

Wie @Manolo gesagt hat, benutzt man CORS (mehr Details gibt es hier: Ссылка - HAFTUNGSAUSSCHLUSS: Ich habe diesen Artikel geschrieben, aber um diese Antwort nicht zu einer Eigenwerbung zu machen, können Sie nach CORS suchen und ähnliche Artikel finden.)

Das Einzige, was ich zur Manolo-Antwort hinzufügen könnte, ist, dass Sie sich nicht um IEs XDomainRequest kümmern müssen, wenn Sie jQuery verwenden, da jQuery diese Browserkompatibilitätsdetails berücksichtigt.

Auch da Sie Restlet verwenden, wird dieser Artikel hilfreich sein: Ссылка

Ich habe nie mit Restlet gearbeitet, aber da Java-basiert ist, gibt es eine andere einfache Option, um CORS zum Erstellen oder Verwenden eines Filters hinzuzufügen. Hier ist eine Apache-Lizenzfilterimplementierung: Ссылка

    
Diego 14.09.2013 05:31
quelle

Tags und Links