Ich habe also eine GWT-Webapp, die mit einer Desktop-Anwendung kommunizieren muss. Um dies zu erreichen, startet das Desktop-Programm einen Webserver an einem bestimmten Port (zB http://localhost:9000
).
Ich habe JSON-P-Kommunikation implementiert, um die Cross-Domain-Filter zu umgehen, was beim lokalen Testen gut funktioniert (webapp läuft bei http://localhost:8888
). Das Problem ist, dass die Produktions-Website über https bedient wird, und kein Browser wird Ihnen erlauben, Javascript über http von https anzufordern.
Also habe ich ein paar Dinge ausprobiert.
Ich habe den Header "Access-Control-Origin: *" mit Javas HttpServletResponse.addHeader("Access-Control-Allow-Origin", "*")
sowohl auf dem Server, der das GWT-Javascript bedient, als auch auf dem Server, an den das Javascript versucht, und HTTP-Anfragen zu machen, gesetzt Das wird von denselben Ursprungsfiltern blockiert (vermutlich, weil ich versuche, eine Anfrage von https an http zu stellen.)
Ich habe versucht, die Json-P-Kommunikation aus einem neuen Fenster (erstellt durch Aufruf von $ wnd.open) ohne eine URL in der Hoffnung, dass es über http laden würde, aber es wird über https geladen, so lief ich in die gleiche Problem wie zuvor.
Gibt es eine Möglichkeit, eine domainübergreifende Anfrage von Javascript über https auf http zu stellen? Es gibt keine Möglichkeit, https auf dem lokalen Host auszuführen (das selbstsignierte Zertifikat wird bei JSON-P-Anfragen blockiert).
Unter der Annahme, dass der Computer, auf dem Sie bereitstellen, Internetzugriff hat, ist die beste Lösung für dieses Problem die Registrierung einer Subdomain auf Ihrer Hauptwebsite, auf der die Webanwendung gehostet wird (z. B. localhost.example.com) und die DNS-Einträge einzurichten auf 127.0.0.1 zeigen. Sie können dann ein signiertes https-Zertifikat für localhost.example.com erhalten und dieses Zertifikat mit Ihrer Anwendung verteilen.
Worte der Warnung:
Tags und Links https jetty http cross-domain jsonp