2010-03-30 7 views
19

Wie gilt die gleiche Herkunftsrichtlinie für die folgenden zwei Domänen?JavaScript Same Origin Policy - Wie wird es auf verschiedene Subdomains angewendet?

http://server1.MyDomain.com

http://server2.MyDomain.com

Kann ich JS auf einer Seite auf server1 gehostet wird, wenn der Inhalt von server2 retreived ist?

bearbeiten nach Daniels Antwort unten, kann ich Skripte zwischen verschiedenen Subdomains mit dem <script> Tag, aber was ist mit asynchronen Anfragen? Was passiert, wenn ich ein Skript von Server2 auf die Seite von Server1 herunterlade? Kann ich das Skript verwenden, um asynchron mit einem Dienst auf server2 zu kommunizieren?

+1

Mileage wird ein wenig mit IE variieren, aber die allgemeine Regel ist der gleiche Host, der gleiche Port für direkte XHR. Sie können Skripte von jedem beliebigen Ort aus laden, aber soweit async geht, ist die JSONP-Skript-Injection die einzige Option ohne Proxy. –

Antwort

24

Sie können Skripts nur zwischen verschiedenen Sub-Domains mit dem Tag <script> einfügen, da es von der Richtlinie ausgenommen ist.

Mit http://www.example.com/dir/page.html als Quelle (von Wikipedia):

Compared URL        Outcome Reason 
--------------------------------------------------------------------------------------------- 
http://www.example.com/dir/page.html  Success Same protocol and host 
http://www.example.com/dir2/other.html  Success Same protocol and host 
http://www.example.com:81/dir2/other.html Failure Same protocol and host but different port 
https://www.example.com/dir2/other.html Failure Different protocol 
http://en.example.com/dir2/other.html  Failure Different host 
http://example.com/dir2/other.html   Failure Different host (exact match required) 
http://v2.www.example.com/dir2/other.html Failure Different host (exact match required) 

UPDATE:

Kann ich das Skript verwenden zu kommunizieren asynchron mit einem Dienst auf server2?

Ja, Sie mit JSONP können, die die Vorteile der offenen Politik nimmt für <script> Tags JSON anderer Herkunft abzurufen.

Sie auch, wie im folgenden Stack-Überlauf Post desribed unter Verwendung eines Reverse-Proxy, betrachten wünschen können:

+1

@Daniel, danke für die Antwort. Ich habe die Frage mit einer Follow-up-Frage bearbeitet. Könntest du deine Gedanken dazu hinzufügen? Danke – DaveDev

+0

@Dave: Vielleicht möchten Sie JSONP auschecken. Sie können auch einen Reverse Proxy einrichten, wie hier beschrieben: http://stackoverflow.com/questions/2482916/what-am-i-missing-in-the-xmlhttprequest/2482941#2482941 –

+0

Dies ist ein großer , gründliche Antwort. – wprl

0

Sicher, können Sie jedes Skript ausführen, die Sie auf Ihrer nie einfügen Achte darauf, woher es kommt. Denken Sie darüber nach, wie Sie eine Google-Karte auf Ihrer Seite einfügen.

Was Sie beschreiben, ist ein Muster namens Jsonp. Wenn ein Server auf einem anderen Host ein Skript zurückgibt, das Sie in Ihre Seite einfügen, ruft das Skript eine Funktion auf Ihrer Seite mit den Antwortargumenten auf.