Ich versuche, Cross-Site-Ajax mit Tinyproxy als Reverse-Proxy zu verwenden. Hier ist die Konfiguration:
- Ein Desktop-System mit Gentoo Linux. Die IP-Adresse lautet x.x.x.x. Boa (Webserver, Port 80) und Tinyproxy (HTTP-Proxy, Port 8888) laufen auf diesem System.
Hier sind die Testdateien:
\======= a.html ======
Ajax-Test
\======= a.js ========
$(document).ready( function() {
function error_func()
{
alert("Fehler aufgetreten");
}
function ajax_func(data)
{
alert("Ajax erhalten");
}
$.get("http://x.x.x.x:8888/outside/xyz.txt", ajax_func).error(error_func);
});
Ich habe Tinyproxy so konfiguriert, dass http://x.x.x.x:8888/outside/ auf http://www.outside.com/ umgeleitet wird. Ich kontrolliere diese Domain und habe dort eine Textdatei mit dem Inhalt "Teststring" platziert, namens xyz.txt.
Wenn ich die folgende URL in Firefox eingebe: x.x.x.x:8888/xyz.txt, funktioniert alles und ich sehe den "Teststring" im Browserfenster angezeigt. Aber wenn ich x.x.x.x/a.html in Firefox eingebe, erhalte ich den Dialog "Fehler aufgetreten". Ich habe das in IE, Safari, Firefox und Chrome ausprobiert und erhalte den "Fehler aufgetreten"-Dialog in allen davon.
Bitte beachten Sie, dass mir das "Same Origin Policy" bekannt ist, deshalb verwende ich Tinyproxy, um diese Einschränkung zu umgehen.
Ich habe Wireshark auf dem Gentoo Linux-System verwendet, um den Verkehr zu überwachen. Alles sieht in Ordnung aus. Ich sehe eine HTTP-Transaktion zwischen Firefox und x.x.x.x, dann sehe ich eine HTTP-Transaktion zwischen x.x.x.x und "outside" und schließlich eine weitere HTTP-Transaktion zwischen x.x.x.x und Firefox. Die HTTP 200 OK enthält den "Teststring" wie erwartet. Aber trotzdem ist jQuery nicht zufrieden und ich erhalte nicht den "Ajax erhalten"-Dialog...
Eine Sache, die ich vermute, ist der HTTP-Header "Server". Das System x.x.x.x gibt "Server: Boa" an, aber die endgültige Antwort hat "Server: Apache". Würde ich aufgrund dieses Unterschieds gegen die Same-Origin-Policy verstoßen?