vapor-docs/docs/advanced/server.nl.md

235 lines
6.9 KiB
Markdown

# Server
Vapor bevat een high-performance, asynchrone HTTP server gebouwd op [SwiftNIO](https://github.com/apple/swift-nio). Deze server ondersteunt HTTP/1, HTTP/2, en protocol upgrades zoals [WebSockets](websockets.md). De server ondersteunt ook het inschakelen van TLS (SSL).
## Configuratie
De standaard HTTP server van Vapor kan worden geconfigureerd via `app.http.server`.
```swift
// Ondersteunt alleen HTTP/2
app.http.server.configuration.supportVersions = [.two]
```
De HTTP-server ondersteunt verschillende configuratie-opties.
### Hostname
De hostnaam bepaalt op welk adres de server nieuwe verbindingen zal accepteren. De standaard instelling is `127.0.0.1`.
```swift
// Configureer aangepaste hostnaam.
app.http.server.configuration.hostname = "dev.local"
```
De hostnaam van de serverconfiguratie kan worden veranderd door de `--hostname` (`-H`) vlag mee te geven aan het `serve` commando of door de `hostname` parameter mee te geven aan `app.server.start(...)`.
```sh
# Overschrijf geconfigureerde hostnaam.
swift run App serve --hostname dev.local
```
### Poort
De poort optie bepaalt op welke poort van het opgegeven adres de server nieuwe verbindingen accepteert. De standaardinstelling is `8080`.
```swift
// Configureer aangepaste poort.
app.http.server.configuration.port = 1337
```
!!! info
`sudo` kan nodig zijn voor het binden aan poorten kleiner dan `1024`. Poorten groter dan `65535` worden niet ondersteund.
De poort van de server configuratie kan overschreven worden door de `--port` (`-p`) vlag mee te geven aan het `serve` commando of door de `port` parameter mee te geven aan `app.server.start(...)`.
```sh
# Overschrijf geconfigureerde poort.
swift run App serve --port 1337
```
### Backlog
De `backlog` parameter bepaalt de maximale lengte voor de wachtrij van in behandeling zijnde verbindingen. De standaardwaarde is `256`.
```swift
// Configureer aangepaste backlog.
app.http.server.configuration.backlog = 128
```
### Reuse Address
De `reuseAddress` parameter staat het hergebruik van lokale adressen toe. Standaard ingesteld op `true`.
```swift
// Adreshergebruik uitschakelen.
app.http.server.configuration.reuseAddress = false
```
### TCP No Delay
Het inschakelen van de `tcpNoDelay` parameter zal proberen om TCP pakket vertraging te minimaliseren. Staat standaard op `true`.
```swift
// Minimaliseer de pakketvertraging.
app.http.server.configuration.tcpNoDelay = true
```
### Response Compression
De `responseCompression` parameter regelt HTTP response compressie met behulp van gzip. De standaardwaarde is `.disabled`.
```swift
// HTTP-responscompressie inschakelen.
app.http.server.configuration.responseCompression = .enabled
```
Om een initiële buffercapaciteit op te geven, gebruik je de `initialByteBufferCapacity` parameter.
```swift
.enabled(initialByteBufferCapacity: 1024)
```
### Request Decompression
De `requestDecompression` parameter regelt HTTP verzoek decompressie met behulp van gzip. De standaard instelling is `.disabled`.
```swift
// Inschakelen van HTTP verzoek decompressie.
app.http.server.configuration.requestDecompression = .enabled
```
Om een decompressie limiet op te geven, gebruik de `limit` parameter. De standaardwaarde is `.ratio(10)`.
```swift
// Geen decompressie grootte limiet
.enabled(limit: .none)
```
Beschikbare opties zijn:
- `size`: Maximale gedecomprimeerde grootte in bytes.
- `ratio`: Maximale gedecomprimeerde grootte als verhouding van gecomprimeerde bytes.
- `none`: Geen grootte beperkingen.
Het instellen van decompressie grootte limieten kan helpen voorkomen dat kwaadwillig gecomprimeerde HTTP verzoeken grote hoeveelheden geheugen gebruiken.
### Pipelining
De `supportPipelining` parameter schakelt ondersteuning voor HTTP request en response pipelining in. De standaard instelling is `false`.
```swift
// Ondersteuning HTTP pipelining.
app.http.server.configuration.supportPipelining = true
```
### Versies
De `supportVersions` parameter bepaalt welke HTTP versies de server zal gebruiken. Standaard zal Vapor zowel HTTP/1 als HTTP/2 ondersteunen wanneer TLS is ingeschakeld. Alleen HTTP/1 wordt ondersteund wanneer TLS is uitgeschakeld.
```swift
// Schakel HTTP/1 ondersteuning uit.
app.http.server.configuration.supportVersions = [.two]
```
### TLS
De `tlsConfiguration` parameter regelt of TLS (SSL) is ingeschakeld op de server. De standaardinstelling is `nihil`.
```swift
// Schakel TLS in.
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))
)
```
Om deze configuratie te compileren moet u `import NIOSSL` toevoegen bovenaan uw configuratie bestand. Het kan ook nodig zijn om NIOSSL toe te voegen als een afhankelijkheid in uw Package.swift bestand.
### Name
De `serverName` parameter regelt de `Server` header op uitgaande HTTP antwoorden. De standaardwaarde is `nil`.
```swift
// Voeg "Server: vapor" header toe aan antwoorden.
app.http.server.configuration.serverName = "vapor"
```
## Serve Command
Om de server van Vapor op te starten, gebruik het `serve` commando. Dit commando wordt standaard uitgevoerd als er geen andere commando's zijn opgegeven.
```swift
swift run App serve
```
Het `serve` commando accepteert de volgende parameters:
- `hostname` (`-H`): Vervangt de geconfigureerde hostnaam.
- `port` (`-p`): Vervangt de geconfigureerde poort.
- `bind` (`-b`): Vervangt geconfigureerde hostnaam en poort verbonden door `:`.
Een voorbeeld met de `--bind` (`-b`) vlag:
```swift
swift run App serve -b 0.0.0.0:80
```
Gebruik `swift run App serve --help` voor meer informatie.
Het `serve` commando zal luisteren naar `SIGTERM` en `SIGINT` om de server netjes af te sluiten. Gebruik `ctrl+c` (`^c`) om een `SIGINT` signaal te sturen. Als het log level is ingesteld op `debug` of lager, zal informatie over de status van graceful shutdown worden gelogd.
## Handmatig Starten
De server van Vapor kan handmatig worden gestart met `app.server`.
```swift
// Start Vapor's server.
try app.server.start()
// Verzoek server shutdown.
app.server.shutdown()
// Wacht tot de server is afgesloten.
try app.server.onShutdown.wait()
```
## Servers
De server die Vapor gebruikt is configureerbaar. Standaard wordt de ingebouwde HTTP server gebruikt.
```swift
app.servers.use(.http)
```
### Aangepaste Server
Vapor's standaard HTTP server kan worden vervangen door elk type dat voldoet aan `Server`.
```swift
import Vapor
final class MyServer: Server {
...
}
app.servers.use { app in
MyServer()
}
```
Aangepaste servers kunnen `Application.Servers.Provider` uitbreiden voor leading-dot syntax.
```swift
extension Application.Servers.Provider {
static var myServer: Self {
.init {
$0.servers.use { app in
MyServer()
}
}
}
}
app.servers.use(.myServer)
```