Warum sollte man die Restriktionen der SOP umgehen wollen?
Seit dem Aufkommen von AJAX sind Anwendungen im Web möglich geworden, die klassischen Windowsprogrammen in ihrer Funktionalität kaum nachstehen. Dazu wird es zunehmend nötig, dass sich diese Anwendungen aus verschiedenen Quellen im Web mit Daten versorgen. Karten von Googlemaps und OpenStreetMap und dazu Fotos von Flickr zum Beispiel. Solchen Anwendungen steht die Same-Origin-Policy leider im Wege.
Welche Möglichkeiten zum Zugriff auf fremde Domänen gibt es?
Proxy-Service
Wenn die Webseite von Server A geladen wurde, kann der Browser auf Daten von Server A zugreifen (sofern Protokoll und Port auch stimmen), jedoch nicht auf Daten von Server B. Da liegt es nahe, den Server A zu beauftragen, seinerseits die gewünschten Daten von Server B abzuholen und sie an den Browser weiterzureichen. Server A würde hier als Proxy-Server arbeiten, quasi als Vermittler zwischen Browser und Server B. Diese Möglichkeit funktioniert in der Praxis, jedoch ist eine derartige Vorgehensweise nicht immer erwünscht. Server A hätte eine erhöhte Last zu tragen, da er zusätzlich den Datenverkehr aller Browser zu Server B bewältigen muss. Und aus Sicht von Server B wäre Server A ein "Großabnehmer" seiner Daten, was für den Betreiber von Server B möglicherweise nicht erwünscht ist oder dem Server A in Rechnung gestellt würde (je nachdem, um was für eine Dienstleistung es sich hier handelt).
CORS
Das "Cross-Origin Resource Sharing" ist eine Technologie, die angetreten ist, um die Einschränkungen der Same-Origin-Policy geregelt zu umgehen. Dabei werden vom Server zusätzliche HTTP-Header ausgeliefert, die den Browser veranlassen, den Cross-Origin-Zugriff für bestimmte Domänen zuzulassen. Der Vorteil von CORS ist, dass sowohl GET als auch POST verwendet werden können und dass die Methode AJAX-tauglich ist. Leider wird CORS per XMLHttpRequest noch nicht von allen Browsern unterstützt (Stand Ende 2012).
JSONP
Die JavaScript Object Notation with Padding ist keine AJAX-Technologie, da kein XMLHttpRequest verwendet wird, es lassen sich aber vergleichbare Ergebnisse erzielen. JSONP ist dahingehend eingeschränkt, dass keine POST-Requests zum Einsatz kommen können. Diese Technik wird aber von allen Browsern unterstützt.