Meine Website verwendet das http- und das https-Protokoll. es hat keinen Einfluss auf den Inhalt. Meine Site verwendet jQuery Ajax-Aufrufe, die auch einige Bereiche auf der Seite ausfüllen.
Jetzt möchte ich alle Ajax-Anrufe über https tätigen. (Bitte fragen Sie mich nicht warum :)) Wenn ich auf einer Seite mit dem https-Protokoll bin, funktionieren Ajax-Anfragen. Wenn ich mich auf einer Seite mit http-Protokoll befinde, wird ein Javascript-Fehler angezeigt: Zugriff auf eingeschränkten URI verweigert
Ich weiß, dass dies ein domänenübergreifendes Problem ist (tatsächlich ist es ein protokollübergreifendes Problem), und ich weiß, dass ich bei Ajax-Aufrufen dasselbe Protokoll verwenden sollte wie auf der aktuellen Seite.
Trotzdem möchte ich, dass alle Ajax-Anrufe https sind und sie auf einer Seite aufrufen, die über http bereitgestellt wurde. Gibt es eine Problemumgehung, um dies zu erreichen (eine JSON / Proxy-Lösung?), Oder ist dies einfach unmöglich?
Antworten:
Fügen Sie den Header Access-Control-Allow-Origin vom Server hinzu
http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
quelle
Versuchen Sie es mit JSONP.
Die meisten JS-Bibliotheken machen es genauso einfach wie andere AJAX-Aufrufe, verwenden jedoch intern einen Iframe, um die Abfrage durchzuführen.
Wenn Sie JSON nicht für Ihre Nutzdaten verwenden, müssen Sie Ihren eigenen Mechanismus um den Iframe rollen.
persönlich würde ich nur von der http: // Seite zur https: // Seite umleiten
quelle
https:
http://example.com/ wird möglicherweise in einen anderen VirtualHost als https://example.com/ aufgelöst (der, da der Host-Header nicht gesendet wird, auf die Standardeinstellung für diese IP reagiert), sodass die beiden als getrennt behandelt werden Domains und unterliegen somit domänenübergreifenden JS-Einschränkungen.
Mit JSON-Rückrufen können Sie dies möglicherweise vermeiden.
quelle
Schauen Sie sich das OpenSource Forge-Projekt an. Es bietet eine JavaScript-TLS-Implementierung sowie Flash, um die tatsächlichen domänenübergreifenden Anforderungen zu verarbeiten:
http://github.com/digitalbazaar/forge/blob/master/README
Kurz gesagt, mit Forge können Sie XmlHttpRequests von einer über http geladenen Webseite auf eine https-Site erstellen. Sie müssen eine domänenübergreifende Flash-Richtliniendatei über Ihren Server bereitstellen, um die domänenübergreifenden Anforderungen zu aktivieren. Lesen Sie die Blog-Beiträge am Ende der README-Datei, um eine ausführlichere Erklärung der Funktionsweise zu erhalten.
Ich sollte jedoch erwähnen, dass Forge besser für Anfragen zwischen zwei verschiedenen https-Domänen geeignet ist. Der Grund ist, dass es einen möglichen MiTM-Angriff gibt. Wenn Sie JavaScript und Flash von einer nicht sicheren Site laden, kann dies gefährdet sein. Am sichersten ist es, es von einer sicheren Site zu laden und dann auf andere Sites zuzugreifen (sicher oder auf andere Weise).
quelle
Sie könnten versuchen, die https-Seite in einen Iframe zu laden und alle Ajax-Anforderungen über eine Bridge in den Frame / aus dem Frame zu leiten. Dies ist eine Hackaround-Funktion, funktioniert jedoch möglicherweise (nicht sicher, ob sie angesichts des sicheren Kontexts dieselben Zugriffsbeschränkungen auferlegt). . Andernfalls wäre ein lokaler http-Proxy zum Umleiten von Anforderungen (wie bei domänenübergreifenden Anrufen) die akzeptierte Lösung.
quelle
Folgendes mache ich:
Generieren Sie einen versteckten iFrame mit den Daten, die Sie veröffentlichen möchten. Da Sie diesen iFrame weiterhin steuern, gilt derselbe Ursprung nicht. Senden Sie dann das Formular in diesem iFrame an die SSL-Seite. Die SSL-Seite leitet dann zu einer Nicht-SSL-Seite mit Statusmeldungen weiter. Sie haben Zugriff auf den iFrame.
quelle