# Server Vapor enthält einen HTTP-Server auf Basis von [SwiftNIO](https://github.com/apple/swift-nio). Der Server unterstützt die Protokolle HTTP/1, HTTP/2 und Protokollerweiterungen wie [WebSockets](websockets.md). ## 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_". ```swift /// [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_". ```swift /// [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_". ```swift /// [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. ```swift /// [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. ```swift /// [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. ```swift /// [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. ```swift /// [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. ```swift /// [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. ```swift /// [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. ```swift /// [configure.swift] // Enable TLS. app.http.server.configuration.tlsConfiguration = .makeServerConfiguration( certificateChain: try NIOSSLCertificate.fromPEMFile("/path/to/cert.pem").map { .certificate($0) }, privateKey: .privateKey(try NIOSSLPrivateKey(file: "/path/to/key.pem", format: .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. ```swift /// [configure.swift] // Add 'Server: vapor' header to responses. app.http.server.configuration.serverName = "vapor" ``` ## Funktionen ### Start Der Server kann manuell gestartet werden. ```swift // Start Vapor's server. try app.server.start() ``` ### Shutdown ```swift // 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 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. ```swift app.servers.use(.http) ``` ```swift import Vapor final class MyServer: Server { ... } app.servers.use { app in MyServer() } ``` Custom servers can extend `Application.Servers.Provider` for leading-dot syntax. ```swift extension Application.Servers.Provider { static var myServer: Self { .init { $0.servers.use { app in MyServer() } } } } app.servers.use(.myServer) ```