Allow Origin Header für mehrere Domains setzen

In einem früheren Artikel habe ich schon einiges über Cross-Domain Zugriffe (CORS) geschrieben. Wenn man z.B. einen Webservice anbieten will, hat man meistens einige Domains, denen man den Zugriff über Ajax auf den Dienst genehmigen will. Bei einer Domain setzt man folgenden Header in PHP:

header('Access-Control-Allow-Origin: http://www.anfragendedomain1.de');

Man kann als zweiten Parameter angeben, ob der Header einen vorhergehenden gleichartigen Header ersetzten soll. Wenn man den Parameter auf false setzt, kann man also mehrere Header des gleichen Typs setzen.

header('Access-Control-Allow-Origin: http://www.anfragendedomain1.de', false);
header('Access-Control-Allow-Origin: http://www.anfragendedomain2.de', false);

Dies führt aber in mehreren Browsern zu Fehlern.
Folgendermaßen kann man für eine Liste von Domains den Cross-Domain Zugriff ermöglichen:

if (!empty($_SERVER['HTTP_ORIGIN'])) {
  $http_origin = $_SERVER['HTTP_ORIGIN'];
  $allowed_domains = array(
    'http://www.anfragendedomain1.de',
    'http://www.anfragendedomain2.de',
  );
  if (in_array($http_origin, $allowed_domains)) {
      header("Access-Control-Allow-Origin: $http_origin"); 
  }
}


Was gibt es zu beachten?

– http oder https? So muss auch die Domain im Array angegeben werden.
Browserunterstützung beachten
– IE 11 hat mal wieder ein paar Sonderlocken zu beachten
– Genauere Browseraufstellung auch bei Wikipedia



Als erster einen Kommentar schreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert