Ajax Call auf anderen Server

hanssonny

New member
Hi leute,

ich möchte gern ein Formular abschicken und zwar mit der Jquery Funktion $.post

hier wird dann eine php seite auf einem anderen Server aufgerufen.


die Html seite mit Formular läuft auf meinem localhost:9000

und die PHP seite ist auf einem ganz anderen server.

jetzt bekomme ich logicsherweise ein problem wegen der sicherheit ...


XMLHttpRequest cannot load http://SERVER/SLF_contact.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.


Wie muss ich in der php datei die Access-Control-Allow-Origin header setzen damit meine daten durchgehen?
 
Die SOP kann man m.W. nicht über Header ausschalten, also zumindest nicht ohne den Browser zu verändern. Ich würde mit deinem eigenen PHP die Anfrage einfach an das fremde PHP weiterleiten. Gibt dafür einige ganz einfache Funktionen in PHP. Ich glaube, curl heißt eine davon. Das hat den zusätzlichen Vorteil, dass bei Betrachtung des Seitenquellcodes niemand feststellen kann, dass das Ziel ein fremder Server ist.
 
die sache ist die die Quell-Seite ist eine HTML seite die auf einem Server läuft auf dem es kein PHP gibt. Höchstens JAVA wäre möglich.
 
Ja, dann machs als Java Applet. Wie man das signiert, dabei kann ich dir helfen.

- - - Aktualisiert - - -

Ist denn die Nutzergruppe ein geschlossener Kreis, dem man den Browser vorgeben und beeinflussen kann?
 
Hä? Wieso fragst du das, du weißt es doch. JSONP ist nicht auf den eigenen Server beschränkt.
JSONP geht aber über script und ruft idR eine funktion auf. wenn man daten in JSON über ein script lädt, hat man aber nur eine temporäre variable. mit der kann man aber nichts anstellen, weil man auf sie nicht zugreifen kann. bleibt nur noch ein request über das xmlhttpobjekt. das scheitert aber an der sop, wenn es nicht von der selben domain kommt, es sei denn, der server ist so nett und erlaubt es dir per header.
die GW2 API macht das z.b. so
https://api.guildwars2.com/v1/event_details.json
 
Achso, also der Zielserver muss das erlauben, nicht der von dem der Code kommt. Das heißt, der Browser macht bei einem Ajax Request bei fremden Servern immer erstmal eine Anfrage beim Zielserver, ob der einen Crossrequest zulässt?
 
der Browser macht bei einem Ajax Request bei fremden Servern immer erstmal eine Anfrage beim Zielserver, ob der einen Crossrequest zulässt?

Nicht "erstmal" ... sondern quasi parallel im selben Request.

1. Der Browser schickt den Request an den Server. Im Header steht unter "Origin:" die anfragende Domain
2. Der Server kann nun (wenn er will) diese Origin auswerten, schauen ob sie zugriffsberechtigt ist, und sie dann (falls ja) zusammen mit der Antwort im "Access-Control-Allow-Origin:" Response-Header zurückschicken.
3. Der Browser wirft eine SOP-Exception, falls seine Origin-Domain nicht mit der Domain in "Access-Control-Allow-Origin" übereinstimmt

Es gibt die folgenden Fälle:
- Server sendet den Response-Header "Access-Control-Allow-Origin" gar nicht => Es sind keine CORS-Requests erlaubt.
- Server sendet "Access-Control-Allow-Origin: *" => Alle Domains dürfen CORS-Requests an den Server schicken
- Server sender "Access-Control-Allow-Origin: <GenauEineDomain>" => Die aufgeführte Domain darf CORS-Requests an den Server schicken.

Server, die CORS nur von bestimmten Domains zulassen wollen, senden im allgemeinen den vom berechtigen Client gesendeten Origin-Header einfach zurück. Dieses Vorgehen verhindert, dass nicht berechtigte Clients die berechtigte Domain im Response-Header sehen können
 
Das nehm ich mir gleich mal als Favorit.

- - - Aktualisiert - - -

und verschoben nach /Ajax

- - - Aktualisiert - - -

@hanssonny: Ist für dich eine Lösung dabei?
 
Der Server macht bei CORS eigentlich überhaupt gar nichts und sollte da auch nichts entscheiden (er hat ja keine wirklich verlässlichen Informationen von was und in welcher Umgebung (origin) der Request initiiert wurde). Die SOP ist ja nur im Browser implementiert und der Browser entscheidet hald anhand der Origin-Header ob er den Request an das JS "weitersendet".

PS: ich mach das hier auch: http://kkjs.kkapsner.de/modules/kkjs.load.js

- - - Aktualisiert - - -

@hanssony: solche Origin-Header kann man auch wunderbar über eine .htaccess einrichten. Dazu braucht man nicht zwingend eine serverseitig Sprache.
 
Der Server macht bei CORS eigentlich überhaupt gar nichts und sollte da auch nichts entscheiden (er hat ja keine wirklich verlässlichen Informationen von was und in welcher Umgebung (origin) der Request initiiert wurde).
doch, der server entscheidet letztendlich, sonst wäre das ganze prinzip sinnlos und rein vom browser abhängig. der kann aber nur sagen sop greift oder greift nicht, also geht nie oder immer. wenn der server mit einem header deine domain erlaubt oder nicht, bedeutet das, der server entscheidet.

Die SOP ist ja nur im Browser implementiert und der Browser entscheidet hald anhand der Origin-Header ob er den Request an das JS "weitersendet".
die sop ist im browser implementiert, das ist ja richtig, weil aber festgestellt wurde, das es sinnvoll ist, diese auch umgehen zu können, wurden ja erweiterungen gebaut, die diese auch umgehen können, wie xdomainrequest und CORS.
 
Mit "der Server entscheidet nichts" meine ich, dass er bei verschiedenen Requests immer den gleichen Origin-Header sendet und das nicht von Request zu Request entscheidet.

xdomainrequest braucht auch die Origin-Header um zu funktionieren...
 
Zurück
Oben