Mit Plain-http AJAX: Sie sprechen über Cross-Domain-XMLHttpRequest, die von Browsern nicht zulässig ist. Es gibt eine W3C proposal pending, die dies in Zukunft sicher implementieren wird (teilweise implementiert durch IE8, IIRC), aber derzeit ist dies definitiv nicht möglich.
Es gibt jedoch Abhilfen für sie sicher tun: Subspace (die iframes und document.domain
verwendet), der fragment identifier technique (wieder verwendet iframes) und window.name
technique (wieder iframes!).
Soweit SSL geht, können Sie separate Zertifikate für die Domain und Subdomain kaufen, oder ein einzelnes Platzhalter (* .foo.com) cert, das beide abdeckt (natürlich wird das Wildcard-Zertifikat teurer).
Wenn Sie eine HTTPS-Seite haben, die Elemente aus anderen Domänen anfordert, wird alles gut sein, solange alles HTTPS ist. Das bedeutet, dass Sie eine https://
-Schema-URL im Attribut src
des Iframes angeben müssen, wenn Sie eine der Iframe-Problemumgehungen verwenden.
Eine letzte, weniger effiziente Problemumgehung besteht darin, ein Skript unter https://foo.com
zu haben, das Anfragen an unsichere http://bar.foo.com
sendet.(Dies löst auch das XHR-Cross-Domain-Problem, so dass Sie die anderen Problemumgehungen ignorieren können.) Das bedeutet natürlich, dass Sie die XHR-Anfrage an https://foo.com/someurl
senden, dann trifft sie http://bar.foo.com/someurl
, empfängt die Antwort und sendet sie zurück an den Browser Daher ist es viel besser, wenn Sie die serverseitige Funktionalität von bar.foo.com auf foo.com verschieben, wenn Sie diese Option haben. Aber wenn Sie das Server-Skript nicht verschieben können, ist die Proxy-Verwaltung der richtige Weg.
EDIT: änderte ich das letzte 3 grafs nach etwas mehr Tests und bekommen einen Iframe AJAX Abhilfe (der #fragmentidentifier eins) zu tun über verschiedene HTTPS-Domänen zu arbeiten. Sie können SSL Cross-Domain-AJAX mit Iframes, solange alles https
und das https
Schema ist in der iframe src
verwendet. Zusammenfassend:
- Kurze Antwort: nein, echter Cross-Domain-XHR nicht erlaubt
- Behelfslösung mit iframes: effizienter zu gestalten, muß 2 SSL Zert (oder Wildcard-CERT), etwas komplizierte
- Behelfslösung mit Proxy: weniger effizient, kann mit 1 oder 2 SSL-Zertifikate (1 mit Back-End-Anfrage an bar.foo.com über http) tun, etwas kompliziert