AJAX-Aufrufe an nicht vertrauenswürdige (selbstsignierte) HTTPS schlagen im Hintergrund fehl
Ich möchte, um AJAX-Aufrufe, um ein secure server verwendet ein selbst signiertes Zertifikat. In der Umgebung, wo die app verwendet wird, ist dies in Ordnung-ich kann die CA-Zertifikat, Benutzer und haben Sie installieren Sie vor der Verwendung der app. Allerdings, manchmal ein Benutzer versucht, besuchen Sie die app vor der Installation das certs. In diesen Fällen, die app zu leise ausfällt-zumindest im Firefox (der häufigste Fall des Problems), erscheint es angezeigt, dass der Anruf lautlos stirbt, ohne auch nur aus dem Fehler-handler. FWIW, wenn der Benutzer besucht eine tatsächliche Seite auf dem server sind, bekommen Sie ein cert Warnung.
Konnte ich hack in ein workaround -- sagen wir, ein Herzschlag/ping-Anforderung und der Aufbau einer watchdog-timer, um zu sehen, ob der server antwortet in der Zeit-aber das scheint, gut, hacky. Ich würde es vorziehen, in der Lage sein, um die Verbindung zu testen vor der Zeit. Was ist der "richtige" Weg, um sicherzustellen, dass der server, der Sie sprechen möchten über ein trusted cert innerhalb des Javascript? Ob es einen Unterschied macht, ich mache meine AJAX requests via JQuery.
UPDATE: Es ist eine tolle Pointe hier. Stellt sich heraus, AJAX war nicht das problem. Ich war sicher, dass auf der Grundlage der Symptome, es war in Bezug auf das self-signed certs, aber das fehlen von AJAX Fehler war beunruhigend, esp. angesichts der Skillung verbunden, die in der Antwort unten. Ein anderes team-Mitglied-es genagelt: die AJAX-Fehler-Handler nicht feuern ab, weil JQuery wurde noch nie geladen! Wir waren wie JQuery von einer anderen subdomain unserer Website, auch gehostet auf HTTPS-und die Benutzer Hinzugefügt hatte Ausnahmen für ourService.example.com aber nicht js.example.com. Offenbar, wenn Sie einen <script>
tag an nicht Vertrauenswürdige verschlüsselte Verbindungdass schlägt im hintergrund fehl, als gut.
{/headdesk}
InformationsquelleAutor der Frage Coderer | 2010-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
XMLHttpRequests (AJAX-requests) sind nur zulässig bei gleichen Ursprungs-Server. Das bedeutet, dass das Schema://host:port Teil der Ziel-URL übereinstimmen, die von dem aktuellen Dokument. Nach der Spezifikation, Sie sollte nicht einmal erlaubt werden, um eine Anfrage über die SSL-URL, von der non-SSL.
Weniger hackish-Lösung, die ich sehe, ist, dass Sie nur Kraft-umleiten alle Benutzer die SSL-site. Auf diese Weise werden Sie gezwungen sein, um zu sehen, die Zertifikat-Warnung vor jedem AJAX-request gemacht werden können.
Hinweis: Die spec sagt auch, dass im Falle des TLS-handshake-Fehler (die ich nehme an, dieser Fall fällt unter, in einem Weg), sollte es werfen NETWORK_ERR (code 19) Ausnahme. Sie könnten versuchen, zu fangen der exception bei der Initialisierung des AJAX-request. Finden Sie die Skillung auf die Fehlerbehandlung für mehr details.
InformationsquelleAutor der Antwort Seldaek