Ändern von HTML-Antwort (Nicht Header)
Hoffe jemand kann mir helfen, oder zeigen Sie mich in die richtige Richtung.
Ich wurde gebeten, herauszufinden, wie Sie Akamai (oder jedes andere CDN, oder NGINX) ändern die eigentliche Antwort Körper.
Warum?
Ich bin, um das CDN zu ändern alle "http://" Anforderungen an "https://" anstelle von ändern der App-code zu verwenden "//" für die externe Ressource.
Ist das möglich?
Weiß es jemand?
InformationsquelleAutor der Frage Charlie | 2014-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies scheint möglich über eine Reihe verschiedener Ansätze, aber das ist nicht zu sagen, wie ratsam es eigentlich sein könnten.
Scheint es potentiell problematisch (Beispiel: was ist, wenn Sie umschreiben etwas, das nicht sollte geschrieben haben?) und Maschine-resource-intensive (viel CPU-Zyklen zu analysieren und munge Antwort stellen, immer wieder).
Hier ist was ich gefunden habe:
Nginx hat die http_sub_module , erscheint dies in eine ziemlich unkomplizierte Art und Weise davon, was Sie wollen, Sie zu ersetzen ist einfach und Sie brauchen nur auf übereinstimmung mit einem Muster pro Seite, wie Austausch
<a href="http://example.com/...
mit<a href="https://example.com/...
ein-oder mehrmals. Diese Art von content-mungery scheint lückenhaft, aber je nach situation (kann eine begrenzte Kontrolle der Anwendung) es könnte bekommen Sie es.Wie es aussieht, gibt es etwas namens http_substitutions_filtereventuell inoffizielle oder zumindest nicht Teil der Kern-Nginx-distribution, die mehr tun können leistungsstarke filter-based rewriting der Antwort stellen.
Lack zu haben scheint eine ähnliche Funktion (evtl. ein plugin), aber HAProxy nichtda Sie sich nur in Kopf und Blätter Körper allein, außer, wenn dabei die gzip-Verschiebung. Andere reverse-proxy-fähige software wie Apache oder Squid könnte auch etwas bieten, was sinnvoll, dass Sie würde vor Ihrem Anwendung-server.
Mein Erster Eindruck, in jedem Fall, dass simple string-ersetzen kann Sie nicht Recht bekommen, Sie gibt es, und auch regex-basierte Ersetzung ist nicht wirklich ausreichend, ohne bedeutende Komplexität in der regexes, weil Sie immer Gefahr laufen, umschreiben etwas, dass Sie sollten nicht.
Was würde ich vorschlagen, "wirklich geschehen muss", um zu diesem Zweck zu erreichen, in der die meisten richtigen Weg, wäre eigentlich interpretieren die generierte HTML mit DOM-parsing-Bibliothek, traverse den Baum, und ändern Sie die entsprechenden Elemente-Platz, vor der übergabe wird das überarbeitete Dokument an den Anforderer. Auf diese Weise wird das Dokument geändert, basierend auf einem Kontext-Verständnis von deren Inhalt.
Klingt kompliziert, meiner Meinung nach, denn es ist-so würde ich wieder schlage vor, Sie überdenken Ihre geplante Vorgehensweise, es sei denn, dies ist außerhalb Ihrer Kontrolle.
Letzter Gedanke: Neugier habe das beste von mir, also nahm ich diese Frage und nachträglich die http-reverse-proxy schrieb ich (für einen anderen Zweck), so dass, basierend auf dem content-type, könnte es tatsächlich zu analysieren und zu Fuß die HTML-Struktur, die als eigene Entität, ändern es an Ort und Stelle (wie oben beschrieben), vor der Rückkehr der Nachrichtentext der Antwort an den Anforderer.
Stellt sich heraus, wie ich es erwartet hatte, ziemlich rechenaufwendig ist. Mein test war der Inhalt 29K von real-world HTML-von einer live-Website, mit 56
<a href ...>
und 6<link rel ...>
Elemente, und die rewrite-operation erforderlich 128 ms auf einem 1-GHz-Opteron 1218, und 43 ms 2.4-GHz-Xeon-E5620. Diese benchmarks sind ausschließlich für die zusätzliche Operationen -- ohne die (kleinere Menge), die benötigte Zeit für das eigentliche "proxy" - Funktionalität selbst. Dieser Zeitaufwand ist nicht unüberwindbar, aber könnte hinzufügen, bis zu einer Menge der CPU-Zeit. Dies ist weit mehr als ein regulärer Ausdruck-basierte content-rewrite nehmen würde, aber es ist viel mehr präzise und kaum zu brechen, die Seiten berührt.InformationsquelleAutor der Antwort Michael - sqlbot
Nginx ist HttpSubsModule funktionierte großartig für mich: http://wiki.nginx.org/HttpSubsModule
Wechsel von http zu https sollte so einfach wie diese:
InformationsquelleAutor der Antwort Raptor
Genau das gleiche, aber die korrekte syntax.
InformationsquelleAutor der Antwort Arnaud Weil