Hallo Felix,
ich möchte mittels JavaScript prüfen, ob der Webserver einer anderen Domain eine gewisse Resource (HTML-Dokument) hat, oder nicht. Mir kommt es im Wesentlichen nur auf den HTTP-Statuscode an.
und warum muss es unbedingt Javascript sein? Die Theorie sagt, es geht wegen der SOP nicht; in der Praxis hast du das schon an einigen Beispielen bestätigt gefunden. Auch wenn es irgendwo ein Hintertürchen geben mag, glaube ich nicht, dass es ein offiziell dokumentiertes ist - und dann ist nur eine Frage der Zeit, bis deine Abfragemethode wieder auf die Klappe fällt.
Beispiel: Mein JavaScript in einem Dokument auf example.org will prüfen, ob http://www.felix-riesterer.de/datei.html einen 404er ergibt, oder nicht, um im Bedarfsfalle eine andere Resource anzufordern.
Ich würde diese Prüfung einem Script "in Auftrag geben", das auf example.org rumsitzt. Der clientseitige AJAX-Mechanismus kann ja im Prinzip derselbe bleiben, nur dass dein JS nicht direkt die gesuchte Ressource anfragt, sondern ein Script auf *seinem eigenen* Server beauftragt: "Sag mir, was du siehst ..."
Ich scheitere nach wie vor an der same-origin-policy, die ich im Grunde für ganz in Ordnung halte, jedoch in meinem Fall nicht so ganz einsehen will, warum eine solche Prüfmöglichkeit ein XSS-Sicherheitsloch wäre.
Ich gebe zu, die reine Prüfung auf Existenz bzw. Erreichbarkeit halte ich auch nicht für problematisch. Aber vielleicht übersehen wir einen Fall, in dem auch das schon ein Sicherheitsproblem sein könnte.
Zuletzt wollte ich mit new Image() die Resource anfordern, aber dabei feuert "onerror" jedes Mal, da mein HTML-Dokument natürlich nicht mit dem MIME-Typ für Bilder, sondern völlig zurecht mit "text/html" ausgeliefert wird.
Oops. An die Möglichkeit dachte ich auch noch, als ich deinen Beitrag las. An den falschen MIME-Typ habe ich dabei natürlich nicht gedacht. :-(
Welche Möglichkeiten habe ich mit JavaScript alleine noch?
Keine, fürchte ich.
So long,
Martin
There are 10 types of people in the world: Those who understand the binary system, and those who don't.