Ich wollte ein Community-Wiki zum Thema HTML/JS same-origin policies erstellen, um hoffentlich allen zu helfen, die nach diesem Thema suchen. Dies ist eines der meistgesuchten Themen auf SO und es gibt kein konsolidiertes Wiki dafür, also mache ich es hier :)
Die Richtlinie für den gleichen Ursprung verhindert, dass ein Dokument oder Skript, das von einem Ursprung geladen wird, die Eigenschaften Eigenschaften eines Dokuments aus einem anderen Herkunft. Diese Richtlinie reicht bis zum bis zum Netscape Navigator 2.0 zurück.
Bitte halten Sie die Beispiele ausführlich und geben Sie vorzugsweise auch Ihre Quellen an.
Die Einrichtung eines einfachen Reverse Proxy auf dem Server ermöglicht es dem Browser, relative Pfade für die Ajax-Anfragen zu verwenden, während der Server als Proxy für einen entfernten Standort fungiert.
Bei Verwendung von mod_proxy im Apache ist die grundlegende Konfigurationsanweisung zur Einrichtung eines Reverse-Proxys der ProxyPass
. Sie wird normalerweise wie folgt verwendet:
ProxyPass /ajax/ http://other-domain.com/ajax/
In diesem Fall wäre der Browser in der Lage, /ajax/web_service.xml
als relative URL anzufordern, aber der Server würde dies als Proxy zu http://other-domain.com/ajax/web_service.xml
bedienen.
Ein interessantes Merkmal dieser Methode ist, dass der Reverse Proxy Anfragen an mehrere Back-Ends verteilen kann und somit als Load Balancer fungiert.
Ich verwende JSONP.
Im Grunde fügen Sie
<script src="http://..../someData.js?callback=some_func"/>
auf Ihrer Seite ein.
some_func() sollte aufgerufen werden, damit Sie benachrichtigt werden, dass die Daten eingegangen sind.
Persönlich ist window.postMessage
der zuverlässigste Weg, den ich für moderne Browser gefunden habe. Man muss zwar ein bisschen mehr Arbeit investieren, um sicherzustellen, dass man sich nicht selbst für XSS-Angriffe öffnet, aber das ist ein vernünftiger Kompromiss.
Es gibt auch mehrere Plugins für die beliebten Javascript-Toolkits, die window.postMessage
umhüllen und eine ähnliche Funktionalität für ältere Browser bieten, die die anderen oben beschriebenen Methoden verwenden.