Zum Inhalt

Server

Vapor enthält einen HTTP-Server auf Basis von SwiftNIO. Der Server unterstützt die Protokolle HTTP/1, HTTP/2 und Protokollerweiterungen wie WebSockets.

Einstellungen

Die Einstellungen des Servers können über app.http.server eingerichtet oder verändert werden.

Servername

Der Hostname ist die Bezeichnung des Servers. Standardmäßig lautet der Name "127.0.0.1".

/// [configure.swift]

// Configure custom hostname.
app.http.server.configuration.hostname = "dev.local"

Serverport

Der Port ist die Portnummer des Servers. Der Standard-Port lautet "8080".

/// [configure.swift]

// Configure custom port.
app.http.server.configuration.port = 1337

Backlog

Der Parameter Backlog definiert die maximale Anzahl an ausstehenden Verbindungen zum Server. Der Standardwert lautet "256".

/// [configure.swift]

// custom backlog.
app.http.server.configuration.backlog = 128

Reuse Address

Der Parameter Reuse Adress allows for reuse of local addresses. Standardmäßig ist der Parameter aktiviert.

/// [configure.swift]

// Disable address reuse.
app.http.server.configuration.reuseAddress = false

TCP No Delay

Mit Aktivieren des Parameters TCP No Delay wird versucht die Paketverzögerung so gering wie möglich zu halten. Standardmäßig ist der Parameter aktiviert.

/// [configure.swift]

// Minimize packet delay.
app.http.server.configuration.tcpNoDelay = true

Antwortkomprimierung

Der Parameter responseCompression legt die Komprimierung einer Serverantwort fest. Der Parameter ist standardmäßig deaktiviert. Für die Komprimierung wird Gzip verwendet.

/// [configure.swift]

// Enable HTTP response compression.
app.http.server.configuration.responseCompression = .enabled

// Enable HTTP response compression with an initial buffer capacity
app.http.server.configuration.responseCompression = .enabled(initialByteBufferCapacity: 1024)

Anfragedekomprimierung

Der Parameter requestDecompression legt die Dekomprimierung einer Serveranfrage fest. Der Parameter ist standardmäßig deaktiviert. Für die Komprimierung wird Gzip verwendet.

/// [configure.swift]

// Enable HTTP request decompression.
app.http.server.configuration.requestDecompression = .enabled

// Enable HTTP request decompression with size limit
app.http.server.configuration.requestDecompression = .enabled(limit: .ratio(10))

// Enable HTTP request decompression with no size limit
app.http.server.configuration.requestDecompression = .enabled(limit: .none)

Available options are:

  • size: Maximum decompressed size in bytes.
  • ratio: Maximum decompressed size as ratio of compressed bytes.
  • none: No size limits.

Setting decompression size limits can help prevent maliciously compressed HTTP requests from using large amounts of memory.

Pipelining

Der Parameter supportPipelining aktiviert die Unterstützung für HTTP-Pipeling. Der Parameter ist ständardmäßig deaktiviert.

/// [configure.swift]

// Support HTTP pipelining.
app.http.server.configuration.supportPipelining = true

Versions

Der Parameter supportVersions legt fest, welche HTTP-Versionen vom Server verwendet werden soll. Wenn TLS aktiviert ist, unterstützt Vapor standardmäßig die beiden Protokolle HTTP/1 und HTTP/2. Sobald TLS deaktiviert wird, wird nur HTTP/1 unterstützt.

/// [configure.swift]

// Disable HTTP/1 support.
app.http.server.configuration.supportVersions = [.two]

TLS

Der Parameter tlsConfiguration legt fest, ob TLS (SSL) verwendet werden soll. Standardmäßig ist kein TLS angegeben.

/// [configure.swift]

// Enable TLS.
app.http.server.configuration.tlsConfiguration = .makeServerConfiguration(
    certificateChain: try NIOSSLCertificate.fromPEMFile("/path/to/cert.pem").map { .certificate($0) },
    privateKey: .file("/path/to/key.pem")
)

For this configuration to compile you need to add import NIOSSL at the top of your configuration file. You also might need to add NIOSSL as a dependency in your Package.swift file.

Name

Der Parameter serverName legt das Feld Server in der Kopfzeile einer Serverantwort fest. Standardmäßig ist kein Name angegeben.

/// [configure.swift]

// Add 'Server: vapor' header to responses.
app.http.server.configuration.serverName = "vapor"

Funktionen

Start

Der Server kann manuell gestartet werden.

// Start Vapor's server.
try app.server.start()

Shutdown

// Request server shutdown.
app.server.shutdown()

// Wait for the server to shutdown.
try app.server.onShutdown.wait()

Befehle

Serve

Um den Server zu starten, kannst du Terminal-Befehl serve verwenden. Der Befehl wird automatisch ausgeführt, wenn keine anderen Befehle mitangegeben werden.

swift run App serve

Es können folgende Parameter mitangegeben werden:

Name Befehl Beschreibung Beispiel
hostname -H Überschreibt den vordefinierten Hostname swift run App serve -H dev.local
port -p Überschreibt den vordefinierten Port swift run App serve -p 1337
bind -b Überschreibt den vordefinierten Hostnamen und Port swift run App serve -b 0.0.0.0:80
help --help Hilfe swift run App serve --help

Hinweis

Der Server von Vapor kann grundsätzlich ersetzt werden. Dazu muss der neue Server von Typ Server sein.

app.servers.use(.http)
import Vapor

final class MyServer: Server {
    ...
}

app.servers.use { app in
    MyServer()
}

Custom servers can extend Application.Servers.Provider for leading-dot syntax.

extension Application.Servers.Provider {
    static var myServer: Self {
        .init {
            $0.servers.use { app in
                MyServer()
            }
        }
    }
}

app.servers.use(.myServer)