ich genau dieses Problem lösen musste. Die einzige Lösung, die ich mir vorstellen kann, ist die Verwendung eines Reverse-Proxy. Das funktioniert so:
Browser (request without basic authentication) -> Reverse Proxy (request with added basic authentication) -> Destination server (requires basic authentication)
So gibt es einen Reverse-Proxy, der irgendwo getrennt vom Zielserver läuft. Details der Basisauthentifizierung werden im Reverse-Proxy gespeichert.
Sagen Sie die URL in iframe
sieht wie folgt aus (die Reverse-Proxy auf Port läuft unter der Annahme 8088
): Wo
http://destination_host.com:PORT/cgi-bin/some/path
:
<iframe src="http://proxy_id.proxy_host.com:8088/cgi-bin/some/path"></iframe>
Der Reverse-Proxy die Anforderung dann wie folgt aussehen übersetzt destination_host
, PORT
und Details der Standardauthentifizierung (die an den Zielserver als Anforderungsheader gesendet wird, sodass sie in der URL nicht mehr sichtbar sind) werden aus der Reverseproxykonfiguration basierend auf der 0 übernommendas war in der ursprünglichen URL.
wird der Reverse-Proxy die host
Header ändern (von *.proxy_host.com
zu destination_host.com
), aber es wird den Weg nicht ändern, so ist der Proxy transparent auf alle Anfragen aus dem Browser CSS oder JavaScript, einschließlich aller Unteranforderungen kommenden Dateien herunterladen oder sogar für alle Anfragen, die von JavaScript initiiert wurden.
Für diese Konfiguration sind entsprechende DNS-Einträge erforderlich, sodass proxy_id.proxy_host.com
in die IP des Reverseproxys aufgelöst wird und destination_host.com
in die IP des Zielservers aufgelöst wird. Je nach Anforderungen kann proxy_host
tatsächlich dasselbe sein wie destination_host
(z. B. wenn der Proxy auf dem Zielserver ausgeführt wird).
Das war die Grundidee. In meinem Projekt können Proxy-Konfigurationen dynamisch hinzugefügt werden, so dass ich sicherstellen musste, dass alle Subdomains der Hauptdomäne *.some_host.com
auf die gleiche Reverse-Proxy-IP aufgelöst werden. Ich verwende Acrylic DNS dafür als die Standard-Windows hosts
Datei unterstützt keine Subdomains als *
(Catch-All).
Je nach den Anforderungen Ihrer Projekte können Sie möglicherweise einen geeigneten Reverse-Proxy finden, der für diesen Zweck verwendet werden könnte. Mein Projekt ist in Erlang geschrieben und ich konnte keinen Proxy finden, den ich verwenden könnte, also habe ich meinen eigenen implementiert. Überprüfen Sie es auf GitHub: yoonka/charreada.Es hat noch keine Dokumentation, aber der Code ist ziemlich einfach. Es kann möglicherweise mit jedem Projekt verwendet werden, das in einer beliebigen Sprache geschrieben ist, aber derzeit besteht die Einschränkung darin, dass die Konfiguration mit Erlang-Aufrufen hinzugefügt wird (wie in meinem Projekt wird es von einer anderen Erlang-Anwendung geliefert). Lesen der Konfiguration von einer statischen Datei, sowie eine bessere Dokumentation, kann hinzugefügt werden, wenn es nur eine Nachfrage dafür gibt :)