Fred Furunkelstein 2012: Textdatei mit ajax von externer URL holen - vista/7 gadget

Beitrag lesen

Ich müsste nur 'im Header Server' die option
Access-Control-Allow-Origin: *
einfügen.

Ich weis allerdings nicht genau, in welche config ich das beim apache, in der die txt bzw php zum auslesen steht, einfügen muss?

Derlei macht man regelmäßig in der Datei .htaccess des Verzeichnisses in dem die Datei oder Ressource liegt, welche den XMLHttpRequest auslöst.

Voraussetzung ist, dass die Konfiguration des Apache das erlaubt. (Allow overwrite).

Andere Lösung: Du bietest Deine HTML-Date als php-Skript an und schreibts vor das HTML:

<?php header('Access-Control-Allow-Origin: http://192.168.1.2); ?>

(oder wie auch immer Du den XHTML-Request adressierst.

Weitere Lösung:

Du schreibst Dir mit z.B. PHP oder was auch immer eine Art Proxy-Skript, welches Du an der Stelle plazierst, wo Du auch die die Datei oder Ressource liegen hast, welche  den XMLHttpRequest auslöst. Im XMLHttpRequest addressierst Du den "Proxy".

In beiden Fällen wirst Du Dich mit serverseitigen Techniken auseinandersetzen müssen. Das "Proxyskript" könnte in der einfachen, hoffentlich halbwegs sicheren Version so aussehen:

<?php  
### xml_proxy.php  
### Konfiguration:  
$addr_default='http://localhost/info.php'; ### keine Sicherheitsprüfung für default-Adresse  
  
$ar_beginn_erlaubte_uris=array (  
        'http://192.168.1.3/test.php'  
        'http://foo_bar.example.com/test.php'  
);  
  
$ar_beginn_erlaubte_hosts=array (  
        '192.168.1.1',  
        '192.168.1.2'  
);  
  
  
### Sicherheitsprüfung auf Host:  
if (isset($_SERVER['REMOTE_ADDR'])) {  
    $erlaubt=false;  
    foreach ($ar_beginn_erlaubte_hosts as $a) {  
	  if ($a == $_SERVER['REMOTE_ADDR']) {  
	      $erlaubt=true;  
	  }  
    }  
  exit_wenn_nicht_erlaubt($erlaubt, 'Host: '.$_SERVER['REMOTE_ADDR']);  
}  
  
### Sicherheitsprüfung auf Quelle:  
if (isset($_GET['addr'])) {  
      $addr=$_GET['addr'];  
      $erlaubt=false;  
      foreach ($ar_beginn_erlaubte_uris as $s) {  
           if ( 0== strpos($addr,$s) ) {  
                 $erlaubt=true;  
           }  
       }  
    exit_wenn_nicht_erlaubt($erlaubt, 'Addresse');  
  
} else { ### Deafult-Adresse  
       $addr=$addr_default;  
       $_GET['addr']=$addr;  
}  
  
### Proxy  
header('Content-Type: application/xml');  
if (! readfile($addr)) {  ## holt und sendet, ist der eigentliche Proxy  
     header("HTTP/1.0 404 ot Found");  
     header("Content-Type: text/html");  
     print '<html><body><h1>Ressource "'.htmlentities($addr).'" existiert nicht!</h1></body></html>';  
}  
  
  
function exit_wenn_nicht_erlaubt($b, $grund)  {  
      if (! $b) {  
          header("HTTP/1.0 403 Forbidden");  
          header("Content-Type: text/html");  
          print "<html><body><h1>Zugriff Verboten</h1><p>Grund: ". $grund."</p></body></html>";  
          exit;  
      }  
}  
?>