Jeg ønsket å lage en fellesskapswiki om HTML / JS samme opprinnelsespolitikk for å forhåpentligvis hjelpe alle som søker etter dette emnet. Dette er et av de mest søkte emnene på SO, og det er ingen konsolidert wiki for det, så her går jeg :)
Den samme opprinnelsespolitikken forhindrer at et dokument eller skript lastet fra en opprinnelse fra å få eller sette egenskapene til et dokument fra en annen opprinnelse. Denne policyen går helt tilbake til Netscape Navigator 2.0.
Vennligst gi fyldige eksempler og helst også lenke til kildene dine.
Ved å sette opp en enkel omvendt proxy på serveren kan nettleseren bruke relative baner for Ajax-forespørslene, mens serveren fungerer som en proxy til et hvilket som helst eksternt sted.
Hvis du bruker mod_proxy i Apache, er det grunnleggende konfigurasjonsdirektivet for å sette opp en omvendt proxy ProxyPass
. Det brukes vanligvis som følger:
ProxyPass /ajax/ http://other-domain.com/ajax/
I dette tilfellet vil nettleseren kunne be om /ajax/web_service.xml
som en relativ URL, men serveren vil betjene denne ved å fungere som en proxy til http://other-domain.com/ajax/web_service.xml
.
Et interessant trekk ved denne metoden er at den omvendte proxyen enkelt kan distribuere forespørsler til flere back-ends, og dermed fungere som en load balancer.
Personlig er window.postMessage
den mest pålitelige måten jeg har funnet for moderne nettlesere. Du må gjøre litt mer arbeid for å sikre at du ikke lar deg være åpen for XSS-angrep, men det er en rimelig avveining.
Det er også flere plugins for de populære Javascript-verktøysettene der ute som pakker window.postMessage
som gir lignende funksjonalitet som eldre nettlesere ved hjelp av de andre metodene som er diskutert ovenfor.