Laden von Daten

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Flash Player- und AIR-Inhalte können Daten mit Servern austauschen. Das Laden von Daten ist ein anderer Vorgang als das Laden von Medien, da die geladenen Informationen als Programmobjekte und nicht als Medien angezeigt werden. Im Allgemeinen kann Inhalt Daten aus der Domäne laden, aus der der Inhalt stammt. In der Regel erfordert Inhalt jedoch Richtliniendateien, um Daten aus anderen Domänen zu laden; siehe Kontrolloptionen für Websites (Richtliniendateien) .

Hinweis: Inhalt, der in der AIR-Anwendungs-Sandbox ausgeführt wird, wird nie von einer Remote-Domäne bereitgestellt (es sei denn, der Entwickler importiert den Remote-Inhalt explizit in die Anwendungs-Sandbox); deshalb ist dieser Inhalt immun gegenüber den Angriffen, die domänenübergreifende Richtlinien verhindern. Richtliniendateien verhindern nicht, dass AIR-Inhalt in der Anwendungs-Sandbox Daten laden kann. Für AIR-Inhalt in anderen Sandboxen gelten jedoch die hier beschriebenen Einschränkungen.

Verwenden von URLLoader und URLStream

Sie können Daten laden, z. B. eine XML-Datei oder eine Textdatei. Die load() -Methoden der URLLoader- und der URLStream-Klasse unterliegen den Zugriffsberechtigungen in einer URL-Richtliniendatei.

Wenn Sie die load() -Methode zum Laden von Inhalten aus einer anderen Domäne verwenden als der, in der sich der diese Methode aufrufende Code befindet, sucht die Laufzeit auf dem Server mit den geladenen Elementen nach einer URL-Richtliniendatei. Wenn eine Richtliniendatei vorhanden ist und sie den Zugriff auf die Domäne des ladenden Inhalts erteilt, können Sie die Daten laden.

Herstellen einer Verbindung mit Sockets

Standardmäßig sucht die Laufzeit nach einer Socket-Richtliniendatei, die an Port 843 bereitgestellt wird. Wie bei URL-Richtliniendateien wird diese Datei als Masterrichtliniendatei bezeichnet.

Als Richtliniendateien in Flash Player 6 eingeführt wurden, gab es noch keine Unterstützung für Socket-Richtliniendateien. Verbindungen mit Socketservern wurden von einer Richtliniendatei am Standardspeicherort auf einem HTTP-Server an Port 80 auf dem gleichen Host wie der Socketserver autorisiert. Diese Funktion wird in Flash Player 9 noch unterstützt, nicht jedoch in Flash Player 10. In Flash Player 10 können ausschließlich Socket-Richtliniendateien Socketverbindungen autorisieren.

Socket-Richtliniendateien unterstützen ähnlich wie URL-Richtliniendateien eine „meta-policy“-Anweisung, die angibt, welche Ports Richtliniendateien bereitstellen können. Die standardmäßige „meta-policy“-Anweisung für Socket-Richtliniendateien ist jedoch „all“, nicht „master-only“. Flash Player geht somit davon aus, dass jedes Socket auf dem Host eine Socket-Richtliniendatei bereitstellen kann, sofern die Master-Richtliniendatei keine strikteren Einstellungen festlegt.

Der Zugriff auf Socket- und XML-Socketverbindungen ist standardmäßig deaktiviert, selbst wenn sich das Socket, zu dem Sie eine Verbindung herstellen möchten, in der gleichen Domäne wie die SWF-Datei befindet. Um den Zugriff auf Socketebene zuzulassen, müssen Sie eine Socket-Richtliniendatei in einem der folgenden Speicherorte bereitstellen:

  • Port 843 (Speicherort der Master-Richtliniendatei)

  • Der gleiche Port wie die Socket-Hauptverbindung

  • Ein anderer Port als die Socket-Hauptverbindung

Flash Player sucht standardmäßig an Port 843 sowie an dem Port der Socket-Hauptverbindung nach einer Socket-Richtliniendatei. Wenn Sie eine Socket-Richtliniendatei an einem anderen Port bereitstellen möchten, muss die SWF-Datei die Methode Security.loadPolicyFile() aufrufen.

Eine Socket-Richtliniendatei weist die gleiche Syntax wie eine URL-Richtliniendatei auf, sie gibt jedoch zusätzlich die Ports an, für die Zugriff gewährt wird. Wenn eine Socket-Richtliniendatei von einer Portnummer unter 1024 bereitgestellt wird, kann sie Zugriff auf beliebige Ports gewähren. Stammt sie dagegen von Port 1024 oder höher, kann sie nur Zugriff auf Port 1024 und höher gewähren. Die zulässigen Ports werden in einem to-ports -Attribut im <allow-access-from> -Tag angegeben. Einstellige Portnummern, Portbereiche und Platzhalterzeichen sind zulässig.

Im Folgenden finden Sie ein Beispiel für eine Socket-Richtliniendatei:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

Um eine Socket-Richtliniendatei an Port 843 oder dem gleichen Port wie die Socket-Hauptverbindung abzurufen, rufen Sie die Methode Socket.connect() oder XMLSocket.connect() auf. Flash Player sucht zunächst eine Master-Richtliniendatei an Port 843. Wenn eine Master-Richtliniendatei gefunden wird, überprüft Flash Player, ob die Datei eine „meta-policy“-Anweisung enthält, die Socket-Richtliniendateien am Zielport untersagt. Ist der Zugriff zulässig, sucht Flash Player in der Master-Richtliniendatei zunächst nach der zugehörigen allow-access-from -Anweisung. Wird keine Master-Richtliniendatei gefunden, sucht Flash Player am gleichen Port wie die Socket-Hauptverbindung nach einer Socket-Richtliniendatei.

Um eine Socket-Richtliniendatei aus einem anderen Speicherort abzurufen, müssen Sie zunächst die Methode Security.loadPolicyFile() mit der speziellen "xmlsocket" -Syntax aufrufen. Dies wird im folgenden Beispiel gezeigt:

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Rufen Sie die Methode Security.loadPolicyFile() auf, bevor Sie die Socket.connect() - oder XMLSocket.connect() -Methode aufrufen. In diesem Fall wartet Flash Player, bis Ihre Richtliniendateianforderung erfüllt wurde. Erst dann entscheidet es, ob Ihre Hauptverbindung zugelassen wird. Wenn die Master-Richtliniendatei jedoch festlegt, dass das Zielverzeichnis keine Richtliniendateien bereitstellen kann, hat der Aufruf der Methode loadPolicyFile() keine Auswirkung, selbst wenn in diesem Verzeichnis eine Richtliniendatei vorhanden ist.

Wenn Sie einen Socketserver implementieren und eine Socket-Richtliniendatei bereitstellen müssen, entscheiden Sie, ob die Richtliniendatei an dem gleichen Port bereitgestellt werden soll, der Hauptverbindungen akzeptiert, oder ob Sie einen anderen Port verwenden möchten. In beiden Fällen muss der Server auf die erste Übertragung vom Client warten, bevor er eine Antwort sendet.

Wenn Flash Player eine Richtliniendatei anfordert, überträgt es nach dem Herstellen der Verbindung immer zuerst den folgenden String:

<policy-file-request/>

Erst nachdem der Server diesen String empfangen hat, kann er die Richtliniendatei senden. Die Anforderung von Flash Player wird immer durch ein Nullbyte beendet und die Antwort des Servers muss ebenfalls auf ein Nullbyte enden.

Erwarten Sie nicht, dass die gleiche Verbindung für die Richtliniendateianforderung und die Hauptverbindung verwendet wird. Sie müssen die Verbindung nach Übertragung der Richtliniendatei schließen. Andernfalls schließt Flash Player die Verbindung für die Richtliniendatei, bevor die Hauptverbindung eingerichtet wird.

Schützen von Daten

Um Daten bei der Übertragung über das Internet vor Abhör- und Änderungsversuchen zu schützen, können Sie TLS (Transport Layer Security) oder SSL (Secure Socket Layer) auf dem Server verwenden, von dem die Daten stammen. Dann können Sie über das HTTPS-Protokoll eine Verbindung mit dem Server herstellen.

In Anwendungen, die für AIR 2 oder höher erstellt werden, lässt sich auch die TCP-Socket-Kommunikation schützen. Mithilfe der SecureSocket-Klasse können Sie eine Socketverbindung mit einem Socket-Server einleiten, der TLS-Version 1 oder SSL-Version 4 verwendet.

Senden von Daten

Das Senden von Daten tritt auf, wenn der Code Daten an einen Server oder an eine Ressource sendet. Das Senden von Daten ist für Inhalt aus einer Netzwerkdomäne immer zulässig. Eine lokale SWF-Datei kann nur dann Daten an Netzwerkadressen senden, wenn sie sich in der „local-trusted“-Sandbox, der „local-with-networking“-Sandbox oder der AIR-Anwendungs-Sandbox befindet. Weitere Informationen finden Sie unter Lokale Sandboxen .

Zum Senden von Daten an eine URL können Sie die Funktion flash.net.sendToURL() verwenden. Andere Methoden senden ebenfalls Anforderungen an URLs. Hierzu gehören ladende Methoden wie Loader.load() und Sound.load() und datenladende Methoden wie URLLoader.load() und URLStream.load() .

Hoch- und Herunterladen von Dateien

Mit der Methode FileReference.upload() starten Sie das Hochladen einer ausgewählten Datei auf einen Remote-Server. Bevor Sie die FileReference.upload() -Methode aufrufen können, müssen Sie die FileReference.browse() - oder die FileReferenceList.browse() -Methode aufrufen.

Der Code, der die Methode FileReference.browse() oder FileReferenceList.browse() initiiert, kann nur als Reaktion auf ein Maus- oder ein Tastaturereignis aufgerufen werden. Wird er in anderen Situationen aufgerufen, lösen Flash Player 10 und neuere Versionen eine Ausnahme aus. Ein vom Benutzer initiiertes Ereignis ist jedoch nicht erforderlich, um diese Methoden von der AIR-Anwendungs-Sandbox aus aufzurufen.

Das Aufrufen der Methode FileReference.download() öffnet ein Dialogfeld, in dem der Benutzer eine Datei zum Herunterladen von einem Remote-Server auswählen kann.

Hinweis: Wenn der Server eine Benutzerauthentifizierung erfordert, kann der Benutzer nur bei SWF-Dateien, die in einem Browser — also mit einem Browser-Plug-In oder einer ActiveX-Steuerung — ausgeführt werden, in einem Dialogfeld zur Eingabe eines Benutzernamens und eines Kennworts zur Authentifizierung aufgefordert werden. Dies gilt darüber hinaus nur für Download-Vorgänge. Flash Player gestattet nicht das Hochladen auf einen Server, der eine Benutzerauthentifizierung erfordert.

Das Hoch- und Herunterladen wird nicht gestattet, wenn sich die aufrufende SWF-Datei in der „local-with-filesystem“-Sandbox befindet.

In der Standardeinstellung kann eine SWF-Datei nur das Hoch- und Herunterladen vom bzw. auf den eigenen Server initiieren. Eine SWF-Datei kann auch auf einen anderen Server hoch- bzw. davon herunterladen, wenn dieser Server eine Richtliniendatei bereitstellt, in der Zugriffsberechtigungen für die Domäne der aufrufenden SWF-Datei erteilt werden.