Skip to content

Statische Dateien direkt vom Webserver ausliefern lassen (X-Sendfile/X-Accel-Redirect Header)

Um eine statische Datei zurückzugeben, wird aktuell per PHP eine Zugriffskontrolle ausgeführt, dann die Datei gelesen und "ausgegeben" (siehe image.php).
Der PHP Prozess muss also die gesamte statische Datei einlesen. Das kann besonders bei großen Dateien und vielen Requests zu Problemen führen.

Mit dem Reponse Header X-Sendfile (Apache) bzw. X-Accel-Redirect (NGINX, Caddy, FrankenPHP) kann das Ausliefern der Datei an den Webserver ausgelagert werden.
Per PHP würde dann nur eine Zugriffskontrolle durchgeführt und der Response Header mit dem Pfad zur Datei gesetzt werden. Der Webserver erkennt dann diesen Header und liefert die Datei aus.
Der Webserver muss zunächst so konfiguriert werden, um diese Funktion zu unterstützen.

Es könnte ein Setting eingebaut werden, mit dem das Feature (für Experten) aktiviert und die Art des Headers festgelegt werden kann.

Weitere Informationen zu den Headern am Beispiel vom FrankenPHP Server: https://frankenphp.dev/docs/x-sendfile/

Disclaimer:
Der X-Sendfile Header steht in Apache nur über ein separates und scheinbar nicht mehr entwickeltes Modul zur Verfügung.
Für andere Webserver, die den X-Accel-Redirect Header unterstützen wäre das Feature aber dennoch sinnvoll.


Ich weise das Ticket erstmal niemandem zu, bis geklärt ist, ob und wann das Feature umgesetzt werden soll.

/cc @mor
/cc @henbug