Direct Sockets API: Laufen FTP- und SSH-Clients bald direkt im Browser?

Über die Direct Sockets API könnten Web-Apps in Zukunft UDP- und TCP-Ports öffnen und sich direkt mit Geräten oder Diensten verbinden, die kein HTTP sprechen.

In Pocket speichern vorlesen Druckansicht 16 Kommentare lesen

(Bild: Andrey Suslov/Shutterstock.com)

Lesezeit: 4 Min.
Von
  • Christian Liebel

Project Fugu, eine Initiative mehrerer Browserhersteller innerhalb des Chromium-Projekts, hat über die vergangenen Jahre viele Schnittstellen ins Web gebracht, die Webanwendungen Zugriff auf plattformspezifische Fähigkeiten gegeben haben und im Web ursprünglich nicht vorhanden waren. Der Fokus des Projektes, das auf diesem Blog schon mehrfach diskutiert wurde, lag zuletzt auf Produktivitätsanwendungen wie Bildbearbeitungsprogrammen oder Office-Apps.

Dank der Fugu-Schnittstellen konnten Ende 2021 etwa gleich zwei hochkarätige Anwendungen in einer Webfassung herausgegeben werden: Adobe stellte eine webbasierte Variante von Photoshop zur Bearbeitung von Clouddokumenten bereit (Creative-Cloud-Abonnement erforderlich) und Microsoft packte seinen Codeeditor Visual Studio Code direkt ins Web.

Überkreuz - Christian Liebel

Christian Liebel (@christianliebel) ist Softwareentwickler bei Thinktecture in Karlsruhe. Er unterstützt seine Kunden bei Digitalisierungsprojekten und der Modernisierung von Businessanwendungen. Sein Steckenpferd sind Cross-Platform-Anwendungen auf Basis moderner Webtechnologien wie Angular, Progressive Web Apps, Project Fugu und Web Components. Für seine Community-Beiträge wurde er als Microsoft MVP und Google GDE ausgezeichnet.

Doch dabei soll es nicht bleiben. Im Rahmen der Isolated Web Apps, das sind Apps, die exklusiv über den Play Store oder per Enterprise Configuration im Unternehmenskontext zur Verfügung gestellt werden und mit Web-Technologien gebaut werden, kommt nun die nächste Kategorie von Anwendungen ins Visier: Apps, die über HTTP, WebSockets und WebRTC hinaus mit Netzwerkdiensten kommunizieren wollen, also etwa FTP-, SSH-, Remote-Desktop- oder E-Mail-Clients, die direkt via POP3 oder SMTP mit dem Server sprechen möchten. Ebenso denkbar sind Netzwerkspiele oder Steuersoftware für (Intranet-)Geräte, die über andere als die üblichen Ports und Protokolle kommunizieren.

Hierzu befindet sich gerade die Direct Sockets API in der frühen Phase der Spezifikation. Das ganze geschieht entsprechend der üblichen Prozesse innerhalb der Web Incubator Community Group (WICG) des W3C. Dort können neue Schnittstellen erprobt und mit Entwicklern und anderen Browser-Herstellern diskutiert werden.

Die von dieser Gruppe herausgegebenen Dokumente sind keine offiziellen Webstandards, können aber später zur passenden Arbeitsgruppe übertragen und dort dann zur W3C-Recommendation werden – Voraussetzung dafür ist die Unterstützung der Schnittstelle durch eine zweite, unabhängige Browser-Engine. Es handelt sich dabei um den zweiten Anlauf zur Implementierung einer solchen Schnittstelle, nachdem die TCP and UDP Socket API im Jahr 2015 nicht zu Ende geführt wurde.

Die Direct Sockets API wird im Explainer-Dokument bei der WICG grob vorgestellt, ein inoffizieller Spezifikationsentwurf wird aktuell erarbeitet. Die Schnittstelle soll es ermöglichen, Client-Ports zu anderen Servern zu öffnen; Server-Ports sind dabei aktuell kein Teil der Spezifikation, der Browser wird also (noch) nicht selbst zum Server. Die Direct Sockets API würde dem globalen Navigator-Objekt zwei Methoden hinzufügen: openTCPSocket(), um ein neues TCP-Clientsocket zu öffnen, und openUDPSocket() zum Öffnen eines UDP-Clientsockets. Zum Aufbau einer SMTP-Verbindung mit einem Mailserver könnte eine Webanwendung etwa folgenden Code nutzen:

if ('openTCPSocket' in navigator) {
  const tcpSocket = await navigator.openTCPSocket({
    remoteAddress: 'mail.gmx.net',
    remotePort: 587,
  });
  // read/write on socket
}

Die jeweiligen Methoden geben dann ein Promise zurück, das mit einem TCP- oder UDP-Socket-Objekt resolved. Kann das Socket nicht geöffnet werden, wird das Promise rejected. Auf dem Socket-Objekt befinden sich die Eigenschaften readable und writable, zwei Streams zum Lesen bzw. Schreiben von Daten. Die Methode close() auf dem Socketobjekt schließt das geöffnete Socket wieder.

Die Schnittstelle befindet sich aktuell in einer frühen Phase der Entwicklung. In Chromium-basierten Browsern muss unter about://flags die Origin der Web-App eingetragen werden, um die Direct Sockets API für diese zu aktivieren. Das funktioniert schon jetzt mindestens unter Linux. Aktuell wird in diesem Fall ein dauerhafter Warnhinweis angezeigt.

Mozilla lehnt die Implementierung der Schnittstelle ab, von Apple gibt es kein offizielles Statement. Die Direct Sockets API würde einer weiteren Klasse von Anwendungen den Weg ins Web ebnen und wäre für alle interessant, die eine plattformübergreifende, direkt im Browser lauffähige Software schreiben wollen, um mit Diensten oder Geräten zu sprechen, die kein HTTP, WebSockets oder WebRTC implementieren. Der weitere Verlauf der Entwicklung bleibt also spannend, bei neuen Ereignissen informieren wir wieder hier auf dem ÜberKreuz-Blog.

[Update 7.7. 14:00]: Die Direct Sockets API wird nicht, wie zuvor berichtet, generell verfügbar gemacht, sondern nur für Isolated Web Apps. Die Schnittstelle lässt sich mindestens unter Linux schon ausprobieren

(rme)