Skip to content

HTTP

[Stabil: 2 - Stabil]

Stabil: 2 Stabilität: 2 - Stabil

Quellcode: lib/http.js

Dieses Modul, das sowohl einen Client als auch einen Server enthält, kann über require('node:http') (CommonJS) oder import * as http from 'node:http' (ES-Modul) importiert werden.

Die HTTP-Schnittstellen in Node.js sind so konzipiert, dass sie viele Funktionen des Protokolls unterstützen, die traditionell schwer zu verwenden waren. Insbesondere große, möglicherweise chunk-codierte Nachrichten. Die Schnittstelle ist darauf bedacht, niemals ganze Anfragen oder Antworten zu puffern, sodass der Benutzer Daten streamen kann.

HTTP-Nachrichtenheader werden durch ein Objekt wie dieses dargestellt:

json
{
  "content-length": "123",
  "content-type": "text/plain",
  "connection": "keep-alive",
  "host": "example.com",
  "accept": "*/*"
}

Schlüssel werden in Kleinbuchstaben umgewandelt. Werte werden nicht verändert.

Um das gesamte Spektrum möglicher HTTP-Anwendungen zu unterstützen, ist die Node.js HTTP-API sehr niedrig-level. Sie befasst sich nur mit Stream-Handling und Nachrichtenparsing. Sie parst eine Nachricht in Header und Body, aber sie parst weder die eigentlichen Header noch den Body.

Siehe message.headers für Details zur Behandlung von doppelten Headern.

Die Rohheader, so wie sie empfangen wurden, werden in der Eigenschaft rawHeaders beibehalten, die ein Array von [key, value, key2, value2, ...] ist. Zum Beispiel könnte das vorherige Nachrichtenheader-Objekt eine rawHeaders-Liste wie die folgende haben:

js
;[
  'ConTent-Length',
  '123456',
  'content-LENGTH',
  '123',
  'content-type',
  'text/plain',
  'CONNECTION',
  'keep-alive',
  'Host',
  'example.com',
  'accepT',
  '*/*',
]

Klasse: http.Agent

Hinzugefügt in: v0.3.4

Ein Agent ist verantwortlich für die Verwaltung der Verbindungspersistenz und -wiederverwendung für HTTP-Clients. Er verwaltet eine Warteschlange aus ausstehenden Anfragen für einen gegebenen Host und Port und verwendet eine einzige Socket-Verbindung für jede, bis die Warteschlange leer ist. Zu diesem Zeitpunkt wird der Socket entweder zerstört oder in einen Pool gelegt, wo er aufbewahrt wird, um wieder für Anfragen an denselben Host und Port verwendet zu werden. Ob er zerstört oder gepoolt wird, hängt von der Option keepAlive ab.

Gepoolte Verbindungen haben TCP Keep-Alive aktiviert, aber Server können immer noch inaktive Verbindungen schließen. In diesem Fall werden sie aus dem Pool entfernt und eine neue Verbindung wird hergestellt, wenn eine neue HTTP-Anfrage für diesen Host und Port gestellt wird. Server können auch verweigern, mehrere Anfragen über dieselbe Verbindung zuzulassen. In diesem Fall muss die Verbindung für jede Anfrage neu hergestellt werden und kann nicht gepoolt werden. Der Agent wird die Anfragen an diesen Server trotzdem stellen, aber jede Anfrage erfolgt über eine neue Verbindung.

Wenn eine Verbindung vom Client oder Server geschlossen wird, wird sie aus dem Pool entfernt. Alle ungenutzten Sockets im Pool werden unreferenziert, um den Node.js-Prozess nicht am Laufen zu halten, wenn keine ausstehenden Anfragen vorhanden sind. (siehe socket.unref()).

Es ist gute Praxis, eine Agent-Instanz mit destroy() zu zerstören, wenn sie nicht mehr verwendet wird, da ungenutzte Sockets OS-Ressourcen verbrauchen.

Sockets werden von einem Agenten entfernt, wenn der Socket entweder ein 'close'-Ereignis oder ein 'agentRemove'-Ereignis auslöst. Wenn man beabsichtigt, eine HTTP-Anfrage lange offen zu halten, ohne sie im Agenten zu behalten, kann man etwas Ähnliches wie folgt tun:

js
http
  .get(options, res => {
    // Aktionen durchführen
  })
  .on('socket', socket => {
    socket.emit('agentRemove')
  })

Ein Agent kann auch für eine einzelne Anfrage verwendet werden. Durch die Angabe von {agent: false} als Option für die Funktionen http.get() oder http.request() wird ein einmalig verwendbarer Agent mit Standardoptionen für die Clientverbindung verwendet.

agent:false:

js
http.get(
  {
    hostname: 'localhost',
    port: 80,
    path: '/',
    agent: false, // Einen neuen Agenten nur für diese eine Anfrage erstellen
  },
  res => {
    // Aktionen mit der Antwort durchführen
  }
)

new Agent([options])

[Historie]

VersionÄnderungen
v15.6.0, v14.17.0Änderung der Standardplanung von 'fifo' zu 'lifo'.
v14.5.0, v12.20.0Hinzufügen der Option scheduling zur Angabe der Strategie zur Planung freier Sockets.
v14.5.0, v12.19.0Hinzufügen der Option maxTotalSockets zum Agent-Konstruktor.
v0.3.4Hinzugefügt in: v0.3.4
  • options <Objekt> Satz konfigurierbarer Optionen, die für den Agenten festgelegt werden sollen. Kann die folgenden Felder enthalten:
    • keepAlive <boolean> Sockets auch dann beibehalten, wenn keine ausstehenden Anforderungen vorhanden sind, damit sie für zukünftige Anforderungen verwendet werden können, ohne eine TCP-Verbindung erneut herstellen zu müssen. Nicht zu verwechseln mit dem keep-alive-Wert des Connection-Headers. Der Connection: keep-alive-Header wird immer gesendet, wenn ein Agent verwendet wird, außer wenn der Connection-Header explizit angegeben ist oder wenn die Optionen keepAlive und maxSockets auf false bzw. Infinity gesetzt sind, in diesem Fall wird Connection: close verwendet. Standard: false.
    • keepAliveMsecs <number> Gibt bei Verwendung der Option keepAlive die Anfangsverzögerung für TCP Keep-Alive-Pakete an. Wird ignoriert, wenn die Option keepAlive false oder undefined ist. Standard: 1000.
    • maxSockets <number> Maximale Anzahl von Sockets, die pro Host zulässig sind. Wenn derselbe Host mehrere gleichzeitige Verbindungen öffnet, verwendet jede Anforderung einen neuen Socket, bis der Wert maxSockets erreicht ist. Wenn der Host versucht, mehr Verbindungen als maxSockets zu öffnen, werden die zusätzlichen Anforderungen in eine Warteschlange ausstehender Anforderungen eintreten und in den aktiven Verbindungszustand eintreten, wenn eine bestehende Verbindung beendet wird. Dadurch wird sichergestellt, dass zu jedem Zeitpunkt maximal maxSockets aktive Verbindungen von einem bestimmten Host bestehen. Standard: Infinity.
    • maxTotalSockets <number> Maximale Anzahl von Sockets, die insgesamt für alle Hosts zulässig sind. Jede Anforderung verwendet einen neuen Socket, bis das Maximum erreicht ist. Standard: Infinity.
    • maxFreeSockets <number> Maximale Anzahl von Sockets pro Host, die in einem freien Zustand offen bleiben sollen. Nur relevant, wenn keepAlive auf true gesetzt ist. Standard: 256.
    • scheduling <string> Zu verwendende Planungsstrategie bei der Auswahl des nächsten freien Sockets. Es kann 'fifo' oder 'lifo' sein. Der Hauptunterschied zwischen den beiden Planungsstrategien besteht darin, dass 'lifo' den zuletzt verwendeten Socket auswählt, während 'fifo' den am wenigsten kürzlich verwendeten Socket auswählt. Bei einer niedrigen Anforderungsrate pro Sekunde verringert die 'lifo'-Planung das Risiko, einen Socket auszuwählen, der möglicherweise aufgrund von Inaktivität vom Server geschlossen wurde. Bei einer hohen Anforderungsrate pro Sekunde maximiert die 'fifo'-Planung die Anzahl der offenen Sockets, während die 'lifo'-Planung diese so niedrig wie möglich hält. Standard: 'lifo'.
    • timeout <number> Socket-Timeout in Millisekunden. Dies legt das Timeout fest, wenn der Socket erstellt wird.

options in socket.connect() werden ebenfalls unterstützt.

Um diese zu konfigurieren, muss eine benutzerdefinierte http.Agent-Instanz erstellt werden.

js
import { Agent, request } from 'node:http'
const keepAliveAgent = new Agent({ keepAlive: true })
options.agent = keepAliveAgent
request(options, onResponseCallback)
js
const http = require('node:http')
const keepAliveAgent = new http.Agent({ keepAlive: true })
options.agent = keepAliveAgent
http.request(options, onResponseCallback)

agent.createConnection(options[, callback])

Hinzugefügt in: v0.11.4

Erzeugt einen Socket/Stream, der für HTTP-Anfragen verwendet wird.

Standardmäßig ist diese Funktion identisch mit net.createConnection(). Benutzerdefinierte Agents können diese Methode jedoch überschreiben, falls eine größere Flexibilität gewünscht wird.

Ein Socket/Stream kann auf zwei Arten bereitgestellt werden: durch Rückgabe des Sockets/Streams aus dieser Funktion oder durch Übergabe des Sockets/Streams an callback.

Diese Methode garantiert die Rückgabe einer Instanz der Klasse <net.Socket>, einer Unterklasse von <stream.Duplex>, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

callback hat die Signatur (err, stream).

agent.keepSocketAlive(socket)

Hinzugefügt in: v8.1.0

Wird aufgerufen, wenn socket von einer Anfrage getrennt wird und vom Agent beibehalten werden könnte. Das Standardverhalten ist:

js
socket.setKeepAlive(true, this.keepAliveMsecs)
socket.unref()
return true

Diese Methode kann von einer bestimmten Agent-Unterklasse überschrieben werden. Wenn diese Methode einen falschen Wert zurückgibt, wird der Socket zerstört, anstatt ihn für die nächste Anfrage beizubehalten.

Das Argument socket kann eine Instanz von <net.Socket>, einer Unterklasse von <stream.Duplex>, sein.

agent.reuseSocket(socket, request)

Hinzugefügt in: v8.1.0

Wird aufgerufen, wenn socket nach dem Beibehalten aufgrund der Keep-Alive-Optionen an request angehängt wird. Das Standardverhalten ist:

js
socket.ref()

Diese Methode kann von einer bestimmten Agent-Unterklasse überschrieben werden.

Das Argument socket kann eine Instanz von <net.Socket>, einer Unterklasse von <stream.Duplex>, sein.

agent.destroy()

Hinzugefügt in: v0.11.4

Zerstört alle Sockets, die derzeit vom Agenten verwendet werden.

Dies ist normalerweise nicht notwendig. Wenn jedoch ein Agent mit aktiviertem keepAlive verwendet wird, ist es am besten, den Agenten explizit herunterzufahren, wenn er nicht mehr benötigt wird. Andernfalls bleiben Sockets möglicherweise ziemlich lange geöffnet, bevor der Server sie beendet.

agent.freeSockets

[Verlauf]

VersionÄnderungen
v16.0.0Das Property hat nun einen null-Prototypen.
v0.11.4Hinzugefügt in: v0.11.4

Ein Objekt, das Arrays von Sockets enthält, die derzeit vom Agenten verwendet werden, wenn keepAlive aktiviert ist. Nicht modifizieren.

Sockets in der freeSockets-Liste werden bei 'timeout' automatisch zerstört und aus dem Array entfernt.

agent.getName([options])

[Verlauf]

VersionÄnderungen
v17.7.0, v16.15.0Der Parameter options ist jetzt optional.
v0.11.4Hinzugefügt in: v0.11.4
  • options <Objekt> Ein Satz von Optionen, die Informationen zur Namensgenerierung bereitstellen

    • host <Zeichenkette> Ein Domänenname oder eine IP-Adresse des Servers, an den die Anfrage gesendet werden soll
    • port <Zahl> Port des entfernten Servers
    • localAddress <Zeichenkette> Lokale Schnittstelle, die für Netzwerkverbindungen gebunden werden soll, wenn die Anfrage gesendet wird
    • family <Ganzzahl> Muss 4 oder 6 sein, wenn dies nicht gleich undefined ist.
  • Rückgabewert: <Zeichenkette>

Ruft einen eindeutigen Namen für einen Satz von Anforderungoptionen ab, um zu bestimmen, ob eine Verbindung wiederverwendet werden kann. Für einen HTTP-Agenten wird host:port:localAddress oder host:port:localAddress:family zurückgegeben. Für einen HTTPS-Agenten enthält der Name die CA, das Zertifikat, die Chiffren und andere HTTPS/TLS-spezifische Optionen, die die Wiederverwendbarkeit von Sockets bestimmen.

agent.maxFreeSockets

Hinzugefügt in: v0.11.7

Standardmäßig auf 256 gesetzt. Für Agents mit aktiviertem keepAlive legt dies die maximale Anzahl von Sockets fest, die im freien Zustand offen bleiben.

agent.maxSockets

Hinzugefügt in: v0.3.6

Standardmäßig auf Infinity gesetzt. Bestimmt, wie viele gleichzeitige Sockets der Agent pro Ursprung offen haben kann. Ursprung ist der Rückgabewert von agent.getName().

agent.maxTotalSockets

Hinzugefügt in: v14.5.0, v12.19.0

Standardmäßig auf Infinity gesetzt. Bestimmt, wie viele gleichzeitige Sockets der Agent insgesamt offen haben kann. Im Gegensatz zu maxSockets gilt dieser Parameter für alle Ursprünge.

agent.requests

[Verlauf]

VersionÄnderungen
v16.0.0Die Eigenschaft hat jetzt einen null-Prototyp.
v0.5.9Hinzugefügt in: v0.5.9

Ein Objekt, das Warteschlangen von Anfragen enthält, die noch keinen Sockets zugewiesen wurden. Nicht modifizieren.

agent.sockets

[Verlauf]

VersionÄnderungen
v16.0.0Die Eigenschaft hat jetzt einen null-Prototyp.
v0.3.6Hinzugefügt in: v0.3.6

Ein Objekt, das Arrays von Sockets enthält, die derzeit vom Agent verwendet werden. Nicht modifizieren.

Klasse: http.ClientRequest

Hinzugefügt in: v0.1.17

Dieses Objekt wird intern erstellt und von http.request() zurückgegeben. Es stellt eine laufende Anfrage dar, deren Header bereits in die Warteschlange eingereiht wurde. Der Header ist weiterhin mit der API setHeader(name, value), getHeader(name), removeHeader(name) veränderbar. Der eigentliche Header wird zusammen mit dem ersten Datenblock oder beim Aufruf von request.end() gesendet.

Um die Antwort zu erhalten, fügen Sie dem Anfrageobjekt einen Listener für 'response' hinzu. 'response' wird vom Anfrageobjekt ausgegeben, wenn die Antwortheader empfangen wurden. Das Ereignis 'response' wird mit einem Argument ausgeführt, das eine Instanz von http.IncomingMessage ist.

Während des Ereignisses 'response' können Listener zum Antwort-Objekt hinzugefügt werden; insbesondere um auf das Ereignis 'data' zu hören.

Wenn kein 'response'-Handler hinzugefügt wird, wird die Antwort vollständig verworfen. Wenn jedoch ein 'response'-Ereignis-Handler hinzugefügt wird, müssen die Daten aus dem Antwort-Objekt verarbeitet werden, entweder durch Aufrufen von response.read() bei jedem 'readable'-Ereignis oder durch Hinzufügen eines 'data'-Handlers oder durch Aufrufen der .resume()-Methode. Bis die Daten verarbeitet sind, wird das 'end'-Ereignis nicht ausgelöst. Außerdem verbraucht die nicht gelesene Daten Speicher, was schließlich zu einem „Speichermangel“-Fehler führen kann.

Aus Gründen der Abwärtskompatibilität gibt res nur dann 'error' aus, wenn ein 'error'-Listener registriert ist.

Setzen Sie den Content-Length-Header, um die Größe des Antwortkörpers zu begrenzen. Wenn response.strictContentLength auf true gesetzt ist, führt eine Nichtübereinstimmung des Content-Length-Header-Werts zu einem Error, der durch code: 'ERR_HTTP_CONTENT_LENGTH_MISMATCH' identifiziert wird.

Der Content-Length-Wert sollte in Bytes, nicht in Zeichen angegeben werden. Verwenden Sie Buffer.byteLength(), um die Länge des Körpers in Bytes zu bestimmen.

Ereignis: 'abort'

Hinzugefügt in: v1.4.1

Veraltet seit: v17.0.0, v16.12.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Hören Sie stattdessen auf das Ereignis 'close'.

Wird ausgegeben, wenn die Anfrage vom Client abgebrochen wurde. Dieses Ereignis wird nur beim ersten Aufruf von abort() ausgegeben.

Ereignis: 'close'

Hinzugefügt in: v0.5.4

Gibt an, dass die Anfrage abgeschlossen ist oder ihre zugrunde liegende Verbindung vorzeitig (vor dem Abschluss der Antwort) beendet wurde.

Ereignis: 'connect'

Hinzugefügt in: v0.7.0

Wird jedes Mal ausgegeben, wenn ein Server mit einer CONNECT-Methode auf eine Anfrage antwortet. Wenn dieses Ereignis nicht abgehört wird, werden die Verbindungen von Clients, die eine CONNECT-Methode erhalten, geschlossen.

Es ist garantiert, dass diesem Ereignis eine Instanz der Klasse <net.Socket>, eine Unterklasse von <stream.Duplex>, übergeben wird, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

Ein Client- und Serverpaar, das zeigt, wie man das Ereignis 'connect' abhört:

js
import { createServer, request } from 'node:http'
import { connect } from 'node:net'
import { URL } from 'node:url'

// Erstellen eines HTTP-Tunnel-Proxys
const proxy = createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('okay')
})
proxy.on('connect', (req, clientSocket, head) => {
  // Verbindung zu einem Ursprungsserver herstellen
  const { port, hostname } = new URL(`http://${req.url}`)
  const serverSocket = connect(port || 80, hostname, () => {
    clientSocket.write('HTTP/1.1 200 Connection Established\r\n' + 'Proxy-agent: Node.js-Proxy\r\n' + '\r\n')
    serverSocket.write(head)
    serverSocket.pipe(clientSocket)
    clientSocket.pipe(serverSocket)
  })
})

// Jetzt, da der Proxy läuft
proxy.listen(1337, '127.0.0.1', () => {
  // Anfrage an einen Tunnel-Proxy stellen
  const options = {
    port: 1337,
    host: '127.0.0.1',
    method: 'CONNECT',
    path: 'www.google.com:80',
  }

  const req = request(options)
  req.end()

  req.on('connect', (res, socket, head) => {
    console.log('Verbindung hergestellt!')

    // Anfrage über einen HTTP-Tunnel stellen
    socket.write('GET / HTTP/1.1\r\n' + 'Host: www.google.com:80\r\n' + 'Connection: close\r\n' + '\r\n')
    socket.on('data', chunk => {
      console.log(chunk.toString())
    })
    socket.on('end', () => {
      proxy.close()
    })
  })
})
js
const http = require('node:http')
const net = require('node:net')
const { URL } = require('node:url')

// Erstellen eines HTTP-Tunnel-Proxys
const proxy = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('okay')
})
proxy.on('connect', (req, clientSocket, head) => {
  // Verbindung zu einem Ursprungsserver herstellen
  const { port, hostname } = new URL(`http://${req.url}`)
  const serverSocket = net.connect(port || 80, hostname, () => {
    clientSocket.write('HTTP/1.1 200 Connection Established\r\n' + 'Proxy-agent: Node.js-Proxy\r\n' + '\r\n')
    serverSocket.write(head)
    serverSocket.pipe(clientSocket)
    clientSocket.pipe(serverSocket)
  })
})

// Jetzt, da der Proxy läuft
proxy.listen(1337, '127.0.0.1', () => {
  // Anfrage an einen Tunnel-Proxy stellen
  const options = {
    port: 1337,
    host: '127.0.0.1',
    method: 'CONNECT',
    path: 'www.google.com:80',
  }

  const req = http.request(options)
  req.end()

  req.on('connect', (res, socket, head) => {
    console.log('Verbindung hergestellt!')

    // Anfrage über einen HTTP-Tunnel stellen
    socket.write('GET / HTTP/1.1\r\n' + 'Host: www.google.com:80\r\n' + 'Connection: close\r\n' + '\r\n')
    socket.on('data', chunk => {
      console.log(chunk.toString())
    })
    socket.on('end', () => {
      proxy.close()
    })
  })
})

Ereignis: 'continue'

Hinzugefügt in: v0.3.2

Gesendet, wenn der Server eine HTTP-Antwort mit „100 Continue“ sendet, in der Regel, weil die Anfrage „Expect: 100-continue“ enthielt. Dies ist eine Anweisung, dass der Client den Anforderungstext senden soll.

Ereignis: 'finish'

Hinzugefügt in: v0.3.6

Gesendet, wenn die Anfrage gesendet wurde. Genauer gesagt, wird dieses Ereignis ausgelöst, wenn das letzte Segment der Antwortheader und des Antworttexts an das Betriebssystem übergeben wurde, um über das Netzwerk übertragen zu werden. Es bedeutet nicht, dass der Server bereits etwas empfangen hat.

Ereignis: 'information'

Hinzugefügt in: v10.0.0

Gesendet, wenn der Server eine 1xx-Zwischenantwort sendet (ausgenommen 101 Upgrade). Die Listener dieses Ereignisses erhalten ein Objekt, das die HTTP-Version, den Statuscode, die Statusmeldung, das Schlüssel-Wert-Header-Objekt und ein Array mit den Rohheadernamen, gefolgt von ihren jeweiligen Werten, enthält.

js
import { request } from 'node:http'

const options = {
  host: '127.0.0.1',
  port: 8080,
  path: '/length_request',
}

// Anfrage stellen
const req = request(options)
req.end()

req.on('information', info => {
  console.log(`Informationen vor der Hauptantwort erhalten: ${info.statusCode}`)
})
js
const http = require('node:http')

const options = {
  host: '127.0.0.1',
  port: 8080,
  path: '/length_request',
}

// Anfrage stellen
const req = http.request(options)
req.end()

req.on('information', info => {
  console.log(`Informationen vor der Hauptantwort erhalten: ${info.statusCode}`)
})

101 Upgrade-Status lösen dieses Ereignis aufgrund ihres Bruchs mit der traditionellen HTTP-Anfrage-/Antwortkette nicht aus, z. B. Websockets, In-Place-TLS-Upgrades oder HTTP 2.0. Um über 101 Upgrade-Benachrichtigungen informiert zu werden, lauschen Sie stattdessen auf das Ereignis 'upgrade'.

Ereignis: 'response'

Hinzugefügt in: v0.1.0

Wird ausgelöst, wenn eine Antwort auf diese Anfrage empfangen wird. Dieses Ereignis wird nur einmal ausgelöst.

Ereignis: 'socket'

Hinzugefügt in: v0.5.3

Dieses Ereignis erhält garantiert eine Instanz der Klasse <net.Socket>, eine Unterklasse von <stream.Duplex>, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

Ereignis: 'timeout'

Hinzugefügt in: v0.7.8

Wird ausgelöst, wenn der zugrunde liegende Socket aufgrund von Inaktivität ein Timeout erhält. Dies teilt lediglich mit, dass der Socket inaktiv war. Die Anfrage muss manuell zerstört werden.

Siehe auch: request.setTimeout().

Ereignis: 'upgrade'

Hinzugefügt in: v0.1.94

Wird jedes Mal ausgelöst, wenn ein Server mit einem Upgrade auf eine Anfrage antwortet. Wenn dieses Ereignis nicht abgehört wird und der Antwortstatuscode 101 Switching Protocols lautet, werden die Verbindungen von Clients, die einen Upgrade-Header empfangen, geschlossen.

Dieses Ereignis erhält garantiert eine Instanz der Klasse <net.Socket>, eine Unterklasse von <stream.Duplex>, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

Ein Client-Server-Paar, das zeigt, wie man das Ereignis 'upgrade' abhört.

js
import http from 'node:http'
import process from 'node:process'

// Erstelle einen HTTP-Server
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('okay')
})
server.on('upgrade', (req, socket, head) => {
  socket.write(
    'HTTP/1.1 101 Web Socket Protocol Handshake\r\n' + 'Upgrade: WebSocket\r\n' + 'Connection: Upgrade\r\n' + '\r\n'
  )

  socket.pipe(socket) // Echo zurück
})

// Jetzt, da der Server läuft
server.listen(1337, '127.0.0.1', () => {
  // Stelle eine Anfrage
  const options = {
    port: 1337,
    host: '127.0.0.1',
    headers: {
      Connection: 'Upgrade',
      Upgrade: 'websocket',
    },
  }

  const req = http.request(options)
  req.end()

  req.on('upgrade', (res, socket, upgradeHead) => {
    console.log('got upgraded!')
    socket.end()
    process.exit(0)
  })
})
js
const http = require('node:http')

// Erstelle einen HTTP-Server
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('okay')
})
server.on('upgrade', (req, socket, head) => {
  socket.write(
    'HTTP/1.1 101 Web Socket Protocol Handshake\r\n' + 'Upgrade: WebSocket\r\n' + 'Connection: Upgrade\r\n' + '\r\n'
  )

  socket.pipe(socket) // Echo zurück
})

// Jetzt, da der Server läuft
server.listen(1337, '127.0.0.1', () => {
  // Stelle eine Anfrage
  const options = {
    port: 1337,
    host: '127.0.0.1',
    headers: {
      Connection: 'Upgrade',
      Upgrade: 'websocket',
    },
  }

  const req = http.request(options)
  req.end()

  req.on('upgrade', (res, socket, upgradeHead) => {
    console.log('got upgraded!')
    socket.end()
    process.exit(0)
  })
})

request.abort()

Hinzugefügt in: v0.3.8

Veraltet seit: v14.1.0, v13.14.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet: Verwenden Sie stattdessen request.destroy().

Markiert die Anfrage als abgebrochen. Durch Aufrufen dieser Funktion werden verbleibende Daten in der Antwort verworfen und die Socketverbindung getrennt.

request.aborted

[Verlauf]

VersionÄnderungen
v17.0.0, v16.12.0Veraltet seit: v17.0.0, v16.12.0
v11.0.0Die Eigenschaft aborted ist keine Zeitstempelnummer mehr.
v0.11.14Hinzugefügt in: v0.11.14

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Überprüfen Sie stattdessen request.destroyed.

Die Eigenschaft request.aborted ist true, wenn die Anfrage abgebrochen wurde.

request.connection

Hinzugefügt in: v0.3.0

Veraltet seit: v13.0.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Verwenden Sie request.socket.

Siehe request.socket.

request.cork()

Hinzugefügt in: v13.2.0, v12.16.0

Siehe writable.cork().

request.end([data[, encoding]][, callback])

[Verlauf]

VersionÄnderungen
v15.0.0Der Parameter data kann nun ein Uint8Array sein.
v10.0.0Diese Methode gibt jetzt einen Verweis auf ClientRequest zurück.
v0.1.90Hinzugefügt in: v0.1.90

Beendet das Senden der Anfrage. Wenn Teile des Körpers nicht gesendet wurden, werden sie in den Stream geschrieben. Wenn die Anfrage geteilt ist, wird das terminierende '0\r\n\r\n' gesendet.

Wenn data angegeben ist, entspricht dies dem Aufruf von request.write(data, encoding) gefolgt von request.end(callback).

Wenn callback angegeben ist, wird es aufgerufen, wenn der Anforderungsstrom abgeschlossen ist.

request.destroy([error])

[Historie]

VersionÄnderungen
v14.5.0Die Funktion gibt this zurück, um die Konsistenz mit anderen Readable Streams zu gewährleisten.
v0.3.0Hinzugefügt in: v0.3.0
  • error <Error> Optional, ein Fehler, der mit dem Ereignis 'error' ausgegeben werden soll.
  • Rückgabewert: <this>

Zerstört die Anfrage. Optional wird ein 'error'-Ereignis und ein 'close'-Ereignis ausgegeben. Durch diesen Aufruf werden verbleibende Daten in der Antwort verworfen und die Socketverbindung zerstört.

Siehe writable.destroy() für weitere Details.

request.destroyed

Hinzugefügt in: v14.1.0, v13.14.0

Ist true, nachdem request.destroy() aufgerufen wurde.

Siehe writable.destroyed für weitere Details.

request.finished

Hinzugefügt in: v0.0.1

Veraltet seit: v13.4.0, v12.16.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Verwenden Sie request.writableEnded.

Die Eigenschaft request.finished ist true, wenn request.end() aufgerufen wurde. request.end() wird automatisch aufgerufen, wenn die Anfrage über http.get() initiiert wurde.

request.flushHeaders()

Hinzugefügt in: v1.6.0

Spült die Request-Header.

Aus Effizienzgründen puffert Node.js die Request-Header normalerweise, bis request.end() aufgerufen wird oder der erste Datenblock geschrieben wird. Anschließend versucht es, die Request-Header und Daten in ein einzelnes TCP-Paket zu packen.

Dies ist normalerweise erwünscht (es spart einen TCP-Roundtrip), aber nicht, wenn die ersten Daten erst viel später gesendet werden. request.flushHeaders() umgeht die Optimierung und startet die Anfrage.

request.getHeader(name)

Hinzugefügt in: v1.6.0

Liest einen Header aus der Anfrage aus. Die Groß-/Kleinschreibung des Namens wird nicht beachtet. Der Typ des Rückgabewerts hängt von den an request.setHeader() übergebenen Argumenten ab.

js
request.setHeader('content-type', 'text/html')
request.setHeader('Content-Length', Buffer.byteLength(body))
request.setHeader('Cookie', ['type=ninja', 'language=javascript'])
const contentType = request.getHeader('Content-Type')
// 'contentType' ist 'text/html'
const contentLength = request.getHeader('Content-Length')
// 'contentLength' ist vom Typ number
const cookie = request.getHeader('Cookie')
// 'cookie' ist vom Typ string[]

request.getHeaderNames()

Hinzugefügt in: v7.7.0

Gibt ein Array zurück, das die eindeutigen Namen der aktuellen ausgehenden Header enthält. Alle Header-Namen sind klein geschrieben.

js
request.setHeader('Foo', 'bar')
request.setHeader('Cookie', ['foo=bar', 'bar=baz'])

const headerNames = request.getHeaderNames()
// headerNames === ['foo', 'cookie']

request.getHeaders()

Hinzugefügt in: v7.7.0

Gibt eine flache Kopie der aktuellen ausgehenden Header zurück. Da eine flache Kopie verwendet wird, können Array-Werte ohne zusätzliche Aufrufe verschiedener header-bezogener Methoden des http-Moduls verändert werden. Die Schlüssel des zurückgegebenen Objekts sind die Header-Namen und die Werte sind die entsprechenden Header-Werte. Alle Header-Namen sind klein geschrieben.

Das von der Methode request.getHeaders() zurückgegebene Objekt erbt nicht prototypisch vom JavaScript-Object. Das bedeutet, dass typische Object-Methoden wie obj.toString(), obj.hasOwnProperty() und andere nicht definiert sind und nicht funktionieren.

js
request.setHeader('Foo', 'bar')
request.setHeader('Cookie', ['foo=bar', 'bar=baz'])

const headers = request.getHeaders()
// headers === { foo: 'bar', 'cookie': ['foo=bar', 'bar=baz'] }

request.getRawHeaderNames()

Hinzugefügt in: v15.13.0, v14.17.0

Gibt ein Array zurück, das die eindeutigen Namen der aktuellen ausgehenden Rohheader enthält. Header-Namen werden mit ihrer genauen Groß-/Kleinschreibung zurückgegeben.

js
request.setHeader('Foo', 'bar')
request.setHeader('Set-Cookie', ['foo=bar', 'bar=baz'])

const headerNames = request.getRawHeaderNames()
// headerNames === ['Foo', 'Set-Cookie']

request.hasHeader(name)

Hinzugefügt in: v7.7.0

Gibt true zurück, wenn der durch name identifizierte Header aktuell in den ausgehenden Headern gesetzt ist. Die Header-Namensübereinstimmung ist nicht-casesensitiv.

js
const hasContentType = request.hasHeader('content-type')

request.maxHeadersCount

Begrenzt die maximale Anzahl an Antwortheadern. Wenn auf 0 gesetzt, wird keine Begrenzung angewendet.

request.path

Hinzugefügt in: v0.4.0

request.method

Hinzugefügt in: v0.1.97

request.host

Hinzugefügt in: v14.5.0, v12.19.0

request.protocol

Hinzugefügt in: v14.5.0, v12.19.0

request.removeHeader(name)

Hinzugefügt in: v1.6.0

Entfernt einen Header, der bereits im Header-Objekt definiert ist.

js
request.removeHeader('Content-Type')

request.reusedSocket

Hinzugefügt in: v13.0.0, v12.16.0

  • <boolean> Ob die Anfrage über eine wiederverwendete Socket gesendet wird.

Beim Senden von Anfragen über einen Agenten mit aktiviertem Keep-Alive wird die zugrunde liegende Socket möglicherweise wiederverwendet. Wenn der Server die Verbindung jedoch zu einem ungünstigen Zeitpunkt schließt, kann beim Client ein 'ECONNRESET'-Fehler auftreten.

js
import http from 'node:http'

// Der Server hat standardmäßig ein Keep-Alive-Timeout von 5 Sekunden
http
  .createServer((req, res) => {
    res.write('hello\n')
    res.end()
  })
  .listen(3000)

setInterval(() => {
  // Anpassen eines Keep-Alive-Agenten
  http.get('http://localhost:3000', { agent }, res => {
    res.on('data', data => {
      // Nichts tun
    })
  })
}, 5000) // Anfrage in 5 Sekunden Intervallen senden, um das Idle-Timeout leicht zu erreichen
js
const http = require('node:http')

// Der Server hat standardmäßig ein Keep-Alive-Timeout von 5 Sekunden
http
  .createServer((req, res) => {
    res.write('hello\n')
    res.end()
  })
  .listen(3000)

setInterval(() => {
  // Anpassen eines Keep-Alive-Agenten
  http.get('http://localhost:3000', { agent }, res => {
    res.on('data', data => {
      // Nichts tun
    })
  })
}, 5000) // Anfrage in 5 Sekunden Intervallen senden, um das Idle-Timeout leicht zu erreichen

Indem wir eine Anfrage kennzeichnen, ob sie eine Socket wiederverwendet hat oder nicht, können wir auf dieser Basis automatische Fehlerwiederholungen durchführen.

js
import http from 'node:http'
const agent = new http.Agent({ keepAlive: true })

function retriableRequest() {
  const req = http
    .get('http://localhost:3000', { agent }, res => {
      // ...
    })
    .on('error', err => {
      // Prüfen, ob eine Wiederholung erforderlich ist
      if (req.reusedSocket && err.code === 'ECONNRESET') {
        retriableRequest()
      }
    })
}

retriableRequest()
js
const http = require('node:http')
const agent = new http.Agent({ keepAlive: true })

function retriableRequest() {
  const req = http
    .get('http://localhost:3000', { agent }, res => {
      // ...
    })
    .on('error', err => {
      // Prüfen, ob eine Wiederholung erforderlich ist
      if (req.reusedSocket && err.code === 'ECONNRESET') {
        retriableRequest()
      }
    })
}

retriableRequest()

request.setHeader(name, value)

Hinzugefügt in: v1.6.0

Setzt einen einzelnen Header-Wert für das Header-Objekt. Wenn dieser Header bereits in den zu sendenden Headern vorhanden ist, wird sein Wert ersetzt. Verwenden Sie hier ein Array von Strings, um mehrere Header mit dem gleichen Namen zu senden. Nicht-String-Werte werden ohne Änderung gespeichert. Daher kann request.getHeader() Nicht-String-Werte zurückgeben. Die Nicht-String-Werte werden jedoch für die Netzwerkübertragung in Strings umgewandelt.

js
request.setHeader('Content-Type', 'application/json')

oder

js
request.setHeader('Cookie', ['type=ninja', 'language=javascript'])

Wenn der Wert ein String ist, wird eine Ausnahme ausgelöst, wenn er Zeichen außerhalb der latin1-Kodierung enthält.

Wenn Sie UTF-8-Zeichen im Wert übergeben müssen, kodieren Sie den Wert bitte nach dem RFC 8187-Standard.

js
const filename = 'Rock 🎵.txt'
request.setHeader('Content-Disposition', `attachment; filename*=utf-8''${encodeURIComponent(filename)}`)

request.setNoDelay([noDelay])

Hinzugefügt in: v0.5.9

Sobald ein Socket dieser Anfrage zugewiesen und verbunden ist, wird socket.setNoDelay() aufgerufen.

request.setSocketKeepAlive([enable][, initialDelay])

Hinzugefügt in: v0.5.9

Sobald ein Socket dieser Anfrage zugewiesen und verbunden ist, wird socket.setKeepAlive() aufgerufen.

request.setTimeout(timeout[, callback])

[Historie]

VersionÄnderungen
v9.0.0Socket-Timeout wird nur konsistent gesetzt, wenn die Socket-Verbindung hergestellt ist.
v0.5.9Hinzugefügt in: v0.5.9
  • timeout <number> Millisekunden, bevor eine Anfrage ein Timeout erhält.
  • callback <Function> Optionale Funktion, die aufgerufen wird, wenn ein Timeout auftritt. Äquivalent zum Binden an das Ereignis 'timeout'.
  • Rückgabewert: <http.ClientRequest>

Sobald eine Socket dieser Anfrage zugewiesen und verbunden ist, wird socket.setTimeout() aufgerufen.

request.socket

Hinzugefügt in: v0.3.0

Referenz auf die zugrunde liegende Socket. Normalerweise sollten Benutzer auf diese Eigenschaft nicht zugreifen. Insbesondere sendet die Socket aufgrund der Art und Weise, wie der Protokollparser an die Socket angehängt wird, keine 'readable'-Ereignisse.

js
import http from 'node:http'
const options = {
  host: 'www.google.com',
}
const req = http.get(options)
req.end()
req.once('response', res => {
  const ip = req.socket.localAddress
  const port = req.socket.localPort
  console.log(`Ihre IP-Adresse ist ${ip} und Ihr Quellport ist ${port}.`)
  // Antwort-Objekt verarbeiten
})
js
const http = require('node:http')
const options = {
  host: 'www.google.com',
}
const req = http.get(options)
req.end()
req.once('response', res => {
  const ip = req.socket.localAddress
  const port = req.socket.localPort
  console.log(`Ihre IP-Adresse ist ${ip} und Ihr Quellport ist ${port}.`)
  // Antwort-Objekt verarbeiten
})

Diese Eigenschaft ist garantiert eine Instanz der Klasse <net.Socket>, einer Unterklasse von <stream.Duplex>, es sei denn, der Benutzer hat einen anderen Socket-Typ als <net.Socket> angegeben.

request.uncork()

Hinzugefügt in: v13.2.0, v12.16.0

Siehe writable.uncork().

request.writableEnded

Hinzugefügt in: v12.9.0

Ist true, nachdem request.end() aufgerufen wurde. Diese Eigenschaft gibt nicht an, ob die Daten gespült wurden. Verwenden Sie stattdessen request.writableFinished.

request.writableFinished

Hinzugefügt in: v12.7.0

Ist true, wenn alle Daten unmittelbar vor dem Auslösen des Ereignisses 'finish' an das zugrunde liegende System gespült wurden.

request.write(chunk[, encoding][, callback])

[Verlauf]

VersionÄnderungen
v15.0.0Der Parameter chunk kann jetzt ein Uint8Array sein.
v0.1.29Hinzugefügt in: v0.1.29

Sendet einen Teil des Texts. Diese Methode kann mehrmals aufgerufen werden. Wenn keine Content-Length festgelegt ist, werden die Daten automatisch in der HTTP Chunked Transfer Encoding codiert, damit der Server weiß, wann die Daten enden. Der Header Transfer-Encoding: chunked wird hinzugefügt. Der Aufruf von request.end() ist notwendig, um das Senden der Anfrage zu beenden.

Das Argument encoding ist optional und gilt nur, wenn chunk eine Zeichenkette ist. Standardwert ist 'utf8'.

Das Argument callback ist optional und wird aufgerufen, wenn dieser Datenabschnitt gespült wird, aber nur, wenn der Abschnitt nicht leer ist.

Gibt true zurück, wenn die gesamten Daten erfolgreich in den Kernel-Puffer gespült wurden. Gibt false zurück, wenn alle oder Teile der Daten im Benutzer-Speicher gepuffert wurden. 'drain' wird ausgegeben, wenn der Puffer wieder frei ist.

Wenn die Funktion write mit einer leeren Zeichenkette oder einem leeren Puffer aufgerufen wird, tut sie nichts und wartet auf weitere Eingaben.

Klasse: http.Server

Hinzugefügt in: v0.1.17

Ereignis: 'checkContinue'

Hinzugefügt in: v0.3.0

Wird jedes Mal ausgelöst, wenn eine Anfrage mit einem HTTP Expect: 100-continue empfangen wird. Wenn dieses Ereignis nicht abgehört wird, antwortet der Server automatisch mit einem 100 Continue, falls angebracht.

Die Behandlung dieses Ereignisses beinhaltet den Aufruf von response.writeContinue(), wenn der Client den Anfrage-Body weiter senden soll, oder die Generierung einer entsprechenden HTTP-Antwort (z. B. 400 Bad Request), wenn der Client den Anfrage-Body nicht weiter senden soll.

Wenn dieses Ereignis ausgelöst und behandelt wird, wird das Ereignis 'request' nicht ausgelöst.

Ereignis: 'checkExpectation'

Hinzugefügt in: v5.5.0

Wird jedes Mal ausgelöst, wenn eine Anfrage mit einem HTTP Expect-Header empfangen wird, wobei der Wert nicht 100-continue ist. Wenn dieses Ereignis nicht abgehört wird, antwortet der Server automatisch mit einem 417 Expectation Failed, falls angebracht.

Wenn dieses Ereignis ausgelöst und behandelt wird, wird das Ereignis 'request' nicht ausgelöst.

Ereignis: 'clientError'

[Verlauf]

VersionÄnderungen
v12.0.0Das Standardverhalten gibt einen 431 Request Header Fields Too Large zurück, wenn ein HPE_HEADER_OVERFLOW-Fehler auftritt.
v9.4.0Das rawPacket ist der aktuelle Puffer, der gerade geparst wurde. Das Hinzufügen dieses Puffers zum Fehlerobjekt des Ereignisses 'clientError' ermöglicht es Entwicklern, das defekte Paket zu protokollieren.
v6.0.0Die Standardaktion, .destroy() auf dem socket aufzurufen, findet nicht mehr statt, wenn Listener für 'clientError' angehängt sind.
v0.1.94Hinzugefügt in: v0.1.94

Wenn eine Clientverbindung ein 'error'-Ereignis auslöst, wird es hier weitergeleitet. Der Listener dieses Ereignisses ist dafür verantwortlich, den zugrunde liegenden Socket zu schließen/zu zerstören. Beispielsweise möchte man den Socket möglicherweise anmutiger mit einer benutzerdefinierten HTTP-Antwort schließen, anstatt die Verbindung abrupt zu trennen. Der Socket muss geschlossen oder zerstört werden, bevor der Listener beendet wird.

Dieses Ereignis erhält garantiert eine Instanz der Klasse <net.Socket>, eine Unterklasse von <stream.Duplex>, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

Das Standardverhalten besteht darin, zu versuchen, den Socket mit einem HTTP '400 Bad Request' oder einem HTTP '431 Request Header Fields Too Large' im Falle eines HPE_HEADER_OVERFLOW-Fehlers zu schließen. Wenn der Socket nicht beschreibbar ist oder die Header der aktuell angehängten http.ServerResponse gesendet wurden, wird er sofort zerstört.

socket ist das net.Socket-Objekt, von dem der Fehler stammt.

js
import http from 'node:http'

const server = http.createServer((req, res) => {
  res.end()
})
server.on('clientError', (err, socket) => {
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
})
server.listen(8000)
js
const http = require('node:http')

const server = http.createServer((req, res) => {
  res.end()
})
server.on('clientError', (err, socket) => {
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
})
server.listen(8000)

Wenn das Ereignis 'clientError' auftritt, gibt es kein request- oder response-Objekt, daher muss jede gesendete HTTP-Antwort, einschließlich Antwortheader und Nutzdaten, direkt in das socket-Objekt geschrieben werden. Es muss darauf geachtet werden, dass die Antwort eine korrekt formatierte HTTP-Antwortnachricht ist.

err ist eine Instanz von Error mit zwei zusätzlichen Spalten:

  • bytesParsed: die Byteanzahl des Anfragepakets, die Node.js möglicherweise korrekt geparst hat;
  • rawPacket: das Rohpaket der aktuellen Anfrage.

In einigen Fällen hat der Client die Antwort bereits erhalten und/oder der Socket wurde bereits zerstört, wie z. B. bei ECONNRESET-Fehlern. Bevor versucht wird, Daten an den Socket zu senden, ist es besser zu prüfen, ob er noch beschreibbar ist.

js
server.on('clientError', (err, socket) => {
  if (err.code === 'ECONNRESET' || !socket.writable) {
    return
  }

  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n')
})

Ereignis: 'close'

Hinzugefügt in: v0.1.4

Wird ausgelöst, wenn der Server geschlossen wird.

Ereignis: 'connect'

Hinzugefügt in: v0.7.0

Wird jedes Mal ausgelöst, wenn ein Client eine HTTP CONNECT-Methode anfordert. Wenn dieses Ereignis nicht abgehört wird, werden die Verbindungen von Clients, die eine CONNECT-Methode anfordern, geschlossen.

Es wird garantiert, dass diesem Ereignis eine Instanz der Klasse <net.Socket>, eine Unterklasse von <stream.Duplex>, übergeben wird, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

Nachdem dieses Ereignis ausgelöst wurde, hat der Socket der Anfrage keinen 'data'-Ereignislistener mehr, d. h., er muss gebunden werden, um Daten zu verarbeiten, die an den Server über diesen Socket gesendet werden.

Ereignis: 'connection'

Hinzugefügt in: v0.1.0

Dieses Ereignis wird ausgelöst, wenn ein neuer TCP-Stream hergestellt wird. socket ist typischerweise ein Objekt vom Typ net.Socket. Normalerweise möchten Benutzer auf dieses Ereignis nicht zugreifen. Insbesondere löst der Socket keine 'readable'-Ereignisse aus, da der Protokollparser an den Socket angehängt ist. Der socket kann auch unter request.socket aufgerufen werden.

Dieses Ereignis kann auch explizit von Benutzern ausgelöst werden, um Verbindungen in den HTTP-Server einzubringen. In diesem Fall kann jeder Duplex-Stream übergeben werden.

Wenn socket.setTimeout() hier aufgerufen wird, wird das Timeout durch server.keepAliveTimeout ersetzt, wenn der Socket eine Anfrage bearbeitet hat (wenn server.keepAliveTimeout ungleich Null ist).

Es wird garantiert, dass diesem Ereignis eine Instanz der Klasse <net.Socket>, eine Unterklasse von <stream.Duplex>, übergeben wird, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

Ereignis: 'dropRequest'

Hinzugefügt in: v18.7.0, v16.17.0

Wenn die Anzahl der Anfragen auf einem Socket den Schwellenwert von server.maxRequestsPerSocket erreicht, verwirft der Server neue Anfragen und sendet stattdessen das Ereignis 'dropRequest', bevor er 503 an den Client sendet.

Ereignis: 'request'

Hinzugefügt in: v0.1.0

Wird bei jeder Anfrage ausgelöst. Es kann mehrere Anfragen pro Verbindung geben (im Fall von HTTP Keep-Alive-Verbindungen).

Ereignis: 'upgrade'

[Verlauf]

VersionÄnderungen
v10.0.0Das Nicht-Beobachten dieses Ereignisses führt nicht mehr zur Zerstörung des Sockets, wenn ein Client einen Upgrade-Header sendet.
v0.1.94Hinzugefügt in: v0.1.94

Wird jedes Mal ausgelöst, wenn ein Client ein HTTP-Upgrade anfordert. Das Beobachen dieses Ereignisses ist optional, und Clients können keine Protokolländerung erzwingen.

Nach dem Auslösen dieses Ereignisses verfügt der Socket der Anfrage nicht mehr über einen 'data'-Ereignislistener, d. h., er muss gebunden werden, um Daten zu verarbeiten, die an den Server auf diesem Socket gesendet werden.

Dieses Ereignis erhält garantiert eine Instanz der Klasse <net.Socket>, einer Unterklasse von <stream.Duplex>, es sei denn, der Benutzer gibt einen anderen Socket-Typ als <net.Socket> an.

server.close([callback])

[Versionsgeschichte]

VersionÄnderungen
v19.0.0Die Methode schließt inaktive Verbindungen, bevor sie zurückkehrt.
v0.1.90Hinzugefügt in: v0.1.90

Stoppt den Server, neue Verbindungen anzunehmen und schließt alle Verbindungen, die mit diesem Server verbunden sind und keine Anfrage senden oder auf eine Antwort warten. Siehe net.Server.close().

js
const http = require('node:http')

const server = http.createServer({ keepAliveTimeout: 60000 }, (req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)
// Schließt den Server nach 10 Sekunden
setTimeout(() => {
  server.close(() => {
    console.log('Server auf Port 8000 erfolgreich geschlossen')
  })
}, 10000)

server.closeAllConnections()

Hinzugefügt in: v18.2.0

Schließt alle etablierten HTTP(S)-Verbindungen, die mit diesem Server verbunden sind, einschließlich aktiver Verbindungen, die mit diesem Server verbunden sind und eine Anfrage senden oder auf eine Antwort warten. Dies zerstört nicht Sockets, die auf ein anderes Protokoll aktualisiert wurden, wie z. B. WebSocket oder HTTP/2.

js
const http = require('node:http')

const server = http.createServer({ keepAliveTimeout: 60000 }, (req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)
// Schließt den Server nach 10 Sekunden
setTimeout(() => {
  server.close(() => {
    console.log('Server auf Port 8000 erfolgreich geschlossen')
  })
  // Schließt alle Verbindungen und stellt sicher, dass der Server erfolgreich geschlossen wird
  server.closeAllConnections()
}, 10000)

server.closeIdleConnections()

Hinzugefügt in: v18.2.0

Schließt alle Verbindungen, die mit diesem Server verbunden sind und keine Anfrage senden oder auf eine Antwort warten.

js
const http = require('node:http')

const server = http.createServer({ keepAliveTimeout: 60000 }, (req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)
// Schließt den Server nach 10 Sekunden
setTimeout(() => {
  server.close(() => {
    console.log('Server auf Port 8000 erfolgreich geschlossen')
  })
  // Schließt inaktive Verbindungen, wie z. B. Keep-Alive-Verbindungen. Der Server wird geschlossen,
  // sobald die verbleibenden aktiven Verbindungen beendet sind.
  server.closeIdleConnections()
}, 10000)

server.headersTimeout

[Versionsgeschichte]

VersionÄnderungen
v19.4.0, v18.14.0Der Standardwert ist jetzt das Minimum zwischen 60000 (60 Sekunden) oder requestTimeout.
v11.3.0, v10.14.0Hinzugefügt in: v11.3.0, v10.14.0

Begrenzt die Zeit, die der Parser auf den Empfang der vollständigen HTTP-Header wartet.

Wenn das Timeout abläuft, antwortet der Server mit dem Status 408, ohne die Anfrage an den Request-Listener weiterzuleiten, und schließt dann die Verbindung.

Es muss auf einen Wert ungleich Null (z. B. 120 Sekunden) gesetzt werden, um sich vor potenziellen Denial-of-Service-Angriffen zu schützen, falls der Server ohne einen Reverse-Proxy davor bereitgestellt wird.

server.listen()

Startet den HTTP-Server und lauscht auf Verbindungen. Diese Methode ist identisch mit server.listen() von net.Server.

server.listening

Hinzugefügt in: v5.7.0

  • <boolean> Gibt an, ob der Server auf Verbindungen lauscht oder nicht.

server.maxHeadersCount

Hinzugefügt in: v0.7.0

Begrenzt die maximale Anzahl eingehender Header. Wenn auf 0 gesetzt, wird keine Begrenzung angewendet.

server.requestTimeout

[Versionsgeschichte]

VersionÄnderungen
v18.0.0Das Standard-Request-Timeout wurde von keinem Timeout auf 300 Sekunden (5 Minuten) geändert.
v14.11.0Hinzugefügt in: v14.11.0

Legt den Timeout-Wert in Millisekunden für den Empfang der gesamten Anfrage vom Client fest.

Wenn das Timeout abläuft, antwortet der Server mit dem Status 408, ohne die Anfrage an den Request-Listener weiterzuleiten, und schließt dann die Verbindung.

Es muss auf einen Wert ungleich Null (z. B. 120 Sekunden) gesetzt werden, um sich vor potenziellen Denial-of-Service-Angriffen zu schützen, falls der Server ohne einen Reverse-Proxy davor bereitgestellt wird.

server.setTimeout([msecs][, callback])

[History]

VersionÄnderungen
v13.0.0Das Standard-Timeout wurde von 120s auf 0 (kein Timeout) geändert.
v0.9.12Hinzugefügt in: v0.9.12

Legt den Timeout-Wert für Sockets fest und emittiert ein 'timeout'-Ereignis für das Server-Objekt, wobei der Socket als Argument übergeben wird, falls ein Timeout auftritt.

Wenn ein 'timeout'-Ereignislistener für das Server-Objekt vorhanden ist, wird dieser mit dem zeitüberschreitenden Socket als Argument aufgerufen.

Standardmäßig setzt der Server keine Timeouts für Sockets. Wenn jedoch ein Callback dem 'timeout'-Ereignis des Servers zugewiesen wird, müssen Timeouts explizit behandelt werden.

server.maxRequestsPerSocket

Hinzugefügt in: v16.10.0

  • <number> Anfragen pro Socket. Standard: 0 (keine Begrenzung)

Die maximale Anzahl von Anfragen, die ein Socket verarbeiten kann, bevor die Keep-Alive-Verbindung geschlossen wird.

Ein Wert von 0 deaktiviert die Begrenzung.

Wenn die Grenze erreicht ist, wird der Wert des Connection-Headers auf close gesetzt, die Verbindung wird aber nicht tatsächlich geschlossen. Nachfolgende Anfragen, die gesendet werden, nachdem die Grenze erreicht wurde, erhalten als Antwort 503 Service Unavailable.

server.timeout

[History]

VersionÄnderungen
v13.0.0Das Standard-Timeout wurde von 120s auf 0 (kein Timeout) geändert.
v0.9.12Hinzugefügt in: v0.9.12
  • <number> Timeout in Millisekunden. Standard: 0 (kein Timeout)

Die Anzahl der Millisekunden Inaktivität, bevor ein Socket als zeitüberschritten angenommen wird.

Ein Wert von 0 deaktiviert das Timeout-Verhalten bei eingehenden Verbindungen.

Die Socket-Timeout-Logik wird bei der Verbindung eingerichtet. Daher wirkt sich eine Änderung dieses Werts nur auf neue Verbindungen zum Server aus, nicht auf bestehende Verbindungen.

server.keepAliveTimeout

Hinzugefügt in: v8.0.0

  • <number> Timeout in Millisekunden. Standardwert: 5000 (5 Sekunden).

Die Anzahl der Millisekunden Inaktivität, die ein Server nach Abschluss des Schreibens der letzten Antwort warten muss, bevor ein Socket zerstört wird, um auf zusätzliche eingehende Daten zu warten. Wenn der Server neue Daten empfängt, bevor das Keep-Alive-Timeout ausgelöst wurde, wird das reguläre Inaktivitäts-Timeout zurückgesetzt, d. h. server.timeout.

Ein Wert von 0 deaktiviert das Keep-Alive-Timeout-Verhalten bei eingehenden Verbindungen. Ein Wert von 0 lässt den HTTP-Server sich ähnlich verhalten wie Node.js-Versionen vor 8.0.0, die kein Keep-Alive-Timeout hatten.

Die Socket-Timeout-Logik wird bei der Verbindung eingerichtet, daher wirkt sich die Änderung dieses Werts nur auf neue Verbindungen zum Server aus, nicht auf bestehende Verbindungen.

server[Symbol.asyncDispose]()

Hinzugefügt in: v20.4.0

[Stabil: 1 - Experimentell]

Stabil: 1 Stabilität: 1 - Experimentell

Ruft server.close() auf und gibt ein Promise zurück, das erfüllt wird, wenn der Server geschlossen wurde.

Klasse: http.ServerResponse

Hinzugefügt in: v0.1.17

Dieses Objekt wird intern von einem HTTP-Server erstellt, nicht vom Benutzer. Es wird als zweiter Parameter an das Ereignis 'request' übergeben.

Ereignis: 'close'

Hinzugefügt in: v0.6.7

Gibt an, dass die Antwort abgeschlossen ist oder deren zugrunde liegende Verbindung vorzeitig (vor dem Abschluss der Antwort) beendet wurde.

Ereignis: 'finish'

Hinzugefügt in: v0.3.6

Wird ausgegeben, wenn die Antwort gesendet wurde. Genauer gesagt, dieses Ereignis wird ausgegeben, wenn das letzte Segment der Antwortheader und des Antwortkörpers an das Betriebssystem übergeben wurde, um es über das Netzwerk zu übertragen. Es bedeutet nicht, dass der Client bereits etwas empfangen hat.

response.addTrailers(headers)

Hinzugefügt in: v0.3.0

Diese Methode fügt der Antwort HTTP-Trailing-Header (ein Header, aber am Ende der Nachricht) hinzu.

Trailer werden nur ausgegeben, wenn für die Antwort die Chunked Transfer Encoding verwendet wird; andernfalls (z. B. wenn die Anfrage HTTP/1.0 war), werden sie stillschweigend verworfen.

HTTP erfordert, dass der Trailer-Header gesendet wird, um Trailer auszugeben, mit einer Liste der Header-Felder in seinem Wert. Z. B.:

js
response.writeHead(200, { 'Content-Type': 'text/plain', Trailer: 'Content-MD5' })
response.write(fileData)
response.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' })
response.end()

Der Versuch, einen Header-Feldnamen oder -wert mit ungültigen Zeichen festzulegen, führt zu einem Auslösen eines TypeError.

response.connection

Hinzugefügt in: v0.3.0

Veraltet seit: v13.0.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Verwenden Sie response.socket.

Siehe response.socket.

response.cork()

Hinzugefügt in: v13.2.0, v12.16.0

Siehe writable.cork().

response.end([data[, encoding]][, callback])

[Verlauf]

VersionÄnderungen
v15.0.0Der Parameter data kann jetzt ein Uint8Array sein.
v10.0.0Diese Methode gibt jetzt einen Verweis auf ServerResponse zurück.
v0.1.90Hinzugefügt in: v0.1.90

Diese Methode signalisiert dem Server, dass alle Antwort-Header und der Antwortkörper gesendet wurden; der Server sollte diese Nachricht als vollständig betrachten. Die Methode response.end() MUSS für jede Antwort aufgerufen werden.

Wenn data angegeben ist, ist die Wirkung ähnlich wie der Aufruf von response.write(data, encoding) gefolgt von response.end(callback).

Wenn callback angegeben ist, wird es aufgerufen, wenn der Antwortstrom abgeschlossen ist.

response.finished

Hinzugefügt in: v0.0.2

Veraltet seit: v13.4.0, v12.16.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Verwenden Sie response.writableEnded.

Die Eigenschaft response.finished ist true, wenn response.end() aufgerufen wurde.

response.flushHeaders()

Hinzugefügt in: v1.6.0

Spült die Response-Header. Siehe auch: request.flushHeaders().

response.getHeader(name)

Hinzugefügt in: v0.4.0

Liest einen Header aus, der bereits in die Warteschlange gestellt, aber noch nicht an den Client gesendet wurde. Der Name ist nicht Groß-/Kleinschreibungsempfindlich. Der Typ des Rückgabewerts hängt von den an response.setHeader() übergebenen Argumenten ab.

js
response.setHeader('Content-Type', 'text/html')
response.setHeader('Content-Length', Buffer.byteLength(body))
response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript'])
const contentType = response.getHeader('content-type')
// contentType ist 'text/html'
const contentLength = response.getHeader('Content-Length')
// contentLength ist vom Typ number
const setCookie = response.getHeader('set-cookie')
// setCookie ist vom Typ string[]

response.getHeaderNames()

Hinzugefügt in: v7.7.0

Gibt ein Array zurück, das die eindeutigen Namen der aktuellen ausgehenden Header enthält. Alle Header-Namen sind Kleinbuchstaben.

js
response.setHeader('Foo', 'bar')
response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz'])

const headerNames = response.getHeaderNames()
// headerNames === ['foo', 'set-cookie']

response.getHeaders()

Hinzugefügt in: v7.7.0

Gibt eine flache Kopie der aktuellen ausgehenden Header zurück. Da eine flache Kopie verwendet wird, können Array-Werte ohne zusätzliche Aufrufe verschiedener header-bezogener http-Modulmethoden verändert werden. Die Schlüssel des zurückgegebenen Objekts sind die Header-Namen und die Werte sind die jeweiligen Header-Werte. Alle Header-Namen sind klein geschrieben.

Das von der Methode response.getHeaders() zurückgegebene Objekt erbt nicht prototypisch vom JavaScript Object. Das bedeutet, dass typische Object-Methoden wie obj.toString(), obj.hasOwnProperty() und andere nicht definiert sind und nicht funktionieren werden.

js
response.setHeader('Foo', 'bar')
response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz'])

const headers = response.getHeaders()
// headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }

response.hasHeader(name)

Hinzugefügt in: v7.7.0

Gibt true zurück, wenn der durch name identifizierte Header aktuell in den ausgehenden Headern gesetzt ist. Die Header-Namensübereinstimmung ist nicht case-sensitiv.

js
const hasContentType = response.hasHeader('content-type')

response.headersSent

Hinzugefügt in: v0.9.3

Boolean (schreibgeschützt). True, wenn Header gesendet wurden, andernfalls false.

response.removeHeader(name)

Hinzugefügt in: v0.4.0

Entfernt einen Header, der für den impliziten Versand in die Warteschlange eingereiht wurde.

js
response.removeHeader('Content-Encoding')

response.req

Hinzugefügt in: v15.7.0

Ein Verweis auf das ursprüngliche HTTP request-Objekt.

response.sendDate

Hinzugefügt in: v0.7.5

Wenn true, wird der Date-Header automatisch generiert und in der Antwort gesendet, falls er nicht bereits in den Headers vorhanden ist. Standardmäßig true.

Dies sollte nur für Tests deaktiviert werden; HTTP erfordert den Date-Header in Antworten.

response.setHeader(name, value)

Hinzugefügt in: v0.4.0

Gibt das Response-Objekt zurück.

Setzt einen einzelnen Header-Wert für implizite Header. Wenn dieser Header bereits in den zu sendenden Headers existiert, wird sein Wert ersetzt. Verwenden Sie hier ein Array von Strings, um mehrere Header mit dem gleichen Namen zu senden. Nicht-String-Werte werden ohne Änderung gespeichert. Daher kann response.getHeader() Nicht-String-Werte zurückgeben. Die Nicht-String-Werte werden jedoch für die Netzwerkübertragung in Strings konvertiert. Das gleiche Response-Objekt wird an den Aufrufer zurückgegeben, um Call Chaining zu ermöglichen.

js
response.setHeader('Content-Type', 'text/html')

oder

js
response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript'])

Der Versuch, einen Header-Feldnamen oder -wert zu setzen, der ungültige Zeichen enthält, führt zu einem geworfenen TypeError.

Wenn Header mit response.setHeader() gesetzt wurden, werden sie mit allen Headern zusammengeführt, die an response.writeHead() übergeben wurden, wobei die an response.writeHead() übergebenen Header Vorrang haben.

js
// Gibt content-type = text/plain zurück
const server = http.createServer((req, res) => {
  res.setHeader('Content-Type', 'text/html')
  res.setHeader('X-Foo', 'bar')
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('ok')
})

Wenn die Methode response.writeHead() aufgerufen wird und diese Methode nicht aufgerufen wurde, schreibt sie die angegebenen Header-Werte direkt auf den Netzwerkkanal, ohne intern zu cachen, und response.getHeader() auf dem Header liefert nicht das erwartete Ergebnis. Wenn eine schrittweise Befüllung von Headern mit möglicher zukünftiger Abfrage und Modifikation gewünscht ist, verwenden Sie response.setHeader() anstelle von response.writeHead().

response.setTimeout(msecs[, callback])

Hinzugefügt in: v0.9.12

Setzt den Timeout-Wert des Sockets auf msecs. Wenn ein Callback bereitgestellt wird, wird dieser als Listener für das Ereignis 'timeout' am Response-Objekt hinzugefügt.

Wenn kein 'timeout'-Listener zur Anfrage, der Antwort oder dem Server hinzugefügt wird, werden Sockets bei Timeout zerstört. Wenn ein Handler den Ereignissen 'timeout' der Anfrage, der Antwort oder des Servers zugewiesen ist, müssen zeitüberschrittene Sockets explizit behandelt werden.

response.socket

Hinzugefügt in: v0.3.0

Referenz auf den zugrundeliegenden Socket. Normalerweise möchten Benutzer auf diese Eigenschaft nicht zugreifen. Insbesondere sendet der Socket keine 'readable'-Ereignisse aufgrund der Art und Weise, wie der Protokollparser an den Socket angehängt wird. Nach response.end() wird die Eigenschaft auf Null gesetzt.

js
import http from 'node:http'
const server = http
  .createServer((req, res) => {
    const ip = res.socket.remoteAddress
    const port = res.socket.remotePort
    res.end(`Ihre IP-Adresse ist ${ip} und Ihr Quellport ist ${port}.`)
  })
  .listen(3000)
js
const http = require('node:http')
const server = http
  .createServer((req, res) => {
    const ip = res.socket.remoteAddress
    const port = res.socket.remotePort
    res.end(`Ihre IP-Adresse ist ${ip} und Ihr Quellport ist ${port}.`)
  })
  .listen(3000)

Diese Eigenschaft ist garantiert eine Instanz der Klasse <net.Socket>, einer Unterklasse von <stream.Duplex>, es sei denn, der Benutzer hat einen anderen Socket-Typ als <net.Socket> angegeben.

response.statusCode

Hinzugefügt in: v0.4.0

Bei Verwendung impliziter Header (ohne expliziten Aufruf von response.writeHead()) steuert diese Eigenschaft den Statuscode, der an den Client gesendet wird, wenn die Header ausgegeben werden.

js
response.statusCode = 404

Nachdem der Response-Header an den Client gesendet wurde, gibt diese Eigenschaft den gesendeten Statuscode an.

response.statusMessage

Hinzugefügt in: v0.11.8

Bei Verwendung impliziter Header (ohne expliziten Aufruf von response.writeHead()) steuert diese Eigenschaft die Statusmeldung, die an den Client gesendet wird, wenn die Header ausgegeben werden. Wenn diese Eigenschaft undefined bleibt, wird die Standardmeldung für den Statuscode verwendet.

js
response.statusMessage = 'Not found'

Nachdem der Response-Header an den Client gesendet wurde, gibt diese Eigenschaft die gesendete Statusmeldung an.

response.strictContentLength

Hinzugefügt in: v18.10.0, v16.18.0

Wenn auf true gesetzt, überprüft Node.js, ob der Wert des Content-Length-Headers und die Größe des Body in Bytes übereinstimmen. Eine Nichtübereinstimmung des Content-Length-Headerwerts führt zu einem Error, der durch code: 'ERR_HTTP_CONTENT_LENGTH_MISMATCH' identifiziert wird.

response.uncork()

Hinzugefügt in: v13.2.0, v12.16.0

Siehe writable.uncork().

response.writableEnded

Hinzugefügt in: v12.9.0

Ist true, nachdem response.end() aufgerufen wurde. Diese Eigenschaft gibt nicht an, ob die Daten ausgegeben wurden. Verwenden Sie hierfür stattdessen response.writableFinished.

response.writableFinished

Hinzugefügt in: v12.7.0

Ist true, wenn alle Daten unmittelbar vor dem Auslösen des Ereignisses 'finish' an das zugrunde liegende System ausgegeben wurden.

response.write(chunk[, encoding][, callback])

[Verlauf]

VersionÄnderungen
v15.0.0Der Parameter chunk kann jetzt ein Uint8Array sein.
v0.1.29Hinzugefügt in: v0.1.29

Wenn diese Methode aufgerufen wird und response.writeHead() nicht aufgerufen wurde, wird auf den impliziten Header-Modus umgeschaltet und die impliziten Header ausgegeben.

Dies sendet einen Teil des Response-Bodys. Diese Methode kann mehrmals aufgerufen werden, um aufeinanderfolgende Teile des Bodys bereitzustellen.

Wenn rejectNonStandardBodyWrites in createServer auf true gesetzt ist, ist das Schreiben in den Body nicht erlaubt, wenn die Request-Methode oder der Response-Status keinen Inhalt unterstützen. Wenn versucht wird, für eine HEAD-Anfrage oder als Teil einer 204- oder 304-Antwort in den Body zu schreiben, wird ein synchroner Error mit dem Code ERR_HTTP_BODY_NOT_ALLOWED ausgelöst.

chunk kann eine Zeichenkette oder ein Buffer sein. Wenn chunk eine Zeichenkette ist, gibt der zweite Parameter an, wie diese in einen Byte-Stream zu enkodieren ist. callback wird aufgerufen, wenn dieser Datenteil ausgegeben wurde.

Dies ist der Roh-HTTP-Body und hat nichts mit höherwertigen Multipart-Body-Codierungen zu tun, die verwendet werden können.

Beim ersten Aufruf von response.write() werden die gepufferten Headerinformationen und der erste Teil des Bodys an den Client gesendet. Beim zweiten Aufruf von response.write() geht Node.js davon aus, dass Daten gestreamt werden, und sendet die neuen Daten separat. Das heißt, die Antwort wird bis zum ersten Teil des Bodys gepuffert.

Gibt true zurück, wenn die gesamten Daten erfolgreich in den Kernel-Buffer ausgegeben wurden. Gibt false zurück, wenn alle oder Teile der Daten im Benutzer-Speicher gepuffert wurden. 'drain' wird ausgegeben, wenn der Buffer wieder frei ist.

response.writeContinue()

Hinzugefügt in: v0.3.0

Sendet eine HTTP/1.1 100 Continue-Nachricht an den Client und gibt an, dass der Request-Body gesendet werden sollte. Siehe das Ereignis 'checkContinue' auf dem Server.

response.writeEarlyHints(hints[, callback])

[Verlauf]

VersionÄnderungen
v18.11.0Erlaubt das Übergeben von Hints als Objekt.
v18.11.0Hinzugefügt in: v18.11.0

Sendet eine HTTP/1.1 103 Early Hints-Nachricht an den Client mit einem Link-Header, der angibt, dass der User-Agent die verlinkten Ressourcen vorladen/vorverbinden kann. hints ist ein Objekt, das die Werte der Header enthält, die mit der Early Hints-Nachricht gesendet werden sollen. Das optionale Argument callback wird aufgerufen, wenn die Antwortnachricht geschrieben wurde.

Beispiel

js
const earlyHintsLink = '</styles.css>; rel=preload; as=style'
response.writeEarlyHints({
  link: earlyHintsLink,
})

const earlyHintsLinks = ['</styles.css>; rel=preload; as=style', '</scripts.js>; rel=preload; as=script']
response.writeEarlyHints({
  link: earlyHintsLinks,
  'x-trace-id': 'id for diagnostics',
})

const earlyHintsCallback = () => console.log('early hints message sent')
response.writeEarlyHints(
  {
    link: earlyHintsLinks,
  },
  earlyHintsCallback
)

response.writeHead(statusCode[, statusMessage][, headers])

[Verlauf]

VersionÄnderungen
v14.14.0Erlaubt das Übergeben von Headers als Array.
v11.10.0, v10.17.0Gibt this von writeHead() zurück, um das Verketten mit end() zu ermöglichen.
v5.11.0, v4.4.5Ein RangeError wird geworfen, wenn statusCode keine Zahl im Bereich [100, 999] ist.
v0.1.30Hinzugefügt in: v0.1.30

Sendet einen Response-Header an die Anfrage. Der Statuscode ist ein dreistelliger HTTP-Statuscode, wie z. B. 404. Das letzte Argument, headers, sind die Response-Header. Optional kann man eine lesbare statusMessage als zweites Argument angeben.

headers kann ein Array sein, wobei sich Schlüssel und Werte in derselben Liste befinden. Es ist keine Liste von Tupeln. Die gerade indizierten Offsets sind Schlüsselwerte, und die ungerade indizierten Offsets sind die zugehörigen Werte. Das Array hat das gleiche Format wie request.rawHeaders.

Gibt eine Referenz auf die ServerResponse zurück, so dass Aufrufe verkettet werden können.

js
const body = 'hello world'
response
  .writeHead(200, {
    'Content-Length': Buffer.byteLength(body),
    'Content-Type': 'text/plain',
  })
  .end(body)

Diese Methode darf nur einmal für eine Nachricht aufgerufen werden und muss aufgerufen werden, bevor response.end() aufgerufen wird.

Wenn response.write() oder response.end() aufgerufen werden, bevor diese Methode aufgerufen wird, werden die impliziten/veränderlichen Header berechnet und diese Funktion aufgerufen.

Wenn Header mit response.setHeader() gesetzt wurden, werden sie mit allen an response.writeHead() übergebenen Headern zusammengeführt, wobei die an response.writeHead() übergebenen Header Vorrang haben.

Wenn diese Methode aufgerufen wird und response.setHeader() nicht aufgerufen wurde, werden die angegebenen Header-Werte direkt auf den Netzwerkkanal geschrieben, ohne intern zwischengespeichert zu werden, und response.getHeader() für den Header liefert nicht das erwartete Ergebnis. Wenn eine schrittweise Befüllung von Headern mit möglicher zukünftiger Abfrage und Modifikation gewünscht ist, verwenden Sie stattdessen response.setHeader().

js
// Gibt content-type = text/plain zurück
const server = http.createServer((req, res) => {
  res.setHeader('Content-Type', 'text/html')
  res.setHeader('X-Foo', 'bar')
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('ok')
})

Content-Length wird in Bytes, nicht in Zeichen gelesen. Verwenden Sie Buffer.byteLength(), um die Länge des Bodys in Bytes zu bestimmen. Node.js überprüft, ob Content-Length und die Länge des übertragenen Bodys gleich sind oder nicht.

Der Versuch, einen Header-Feldnamen oder -wert zu setzen, der ungültige Zeichen enthält, führt zu einem geworfenen [Error][].

response.writeProcessing()

Hinzugefügt in: v10.0.0

Sendet eine HTTP/1.1 102 Processing-Nachricht an den Client und zeigt an, dass der Anforderungstext gesendet werden sollte.

Klasse: http.IncomingMessage

[Verlauf]

VersionÄnderungen
v15.5.0Der Wert destroyed gibt true zurück, nachdem die eingehenden Daten verbraucht wurden.
v13.1.0, v12.16.0Der Wert readableHighWaterMark spiegelt den Wert des Sockets wider.
v0.1.17Hinzugefügt in: v0.1.17

Ein IncomingMessage-Objekt wird von http.Server oder http.ClientRequest erstellt und als erstes Argument an die Ereignisse 'request' bzw. 'response' übergeben. Es kann verwendet werden, um auf den Antwortstatus, die Header und die Daten zuzugreifen.

Im Gegensatz zu seinem socket-Wert, der eine Unterklasse von <stream.Duplex> ist, erweitert IncomingMessage selbst <stream.Readable> und wird separat erstellt, um die eingehenden HTTP-Header und die Nutzdaten zu analysieren und auszugeben, da die zugrunde liegende Socket bei Keep-Alive mehrmals wiederverwendet werden kann.

Ereignis: 'aborted'

Hinzugefügt in: v0.3.8

Veraltet seit: v17.0.0, v16.12.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Hören Sie stattdessen auf das Ereignis 'close'.

Wird ausgegeben, wenn die Anfrage abgebrochen wurde.

Ereignis: 'close'

[Verlauf]

VersionÄnderungen
v16.0.0Das Close-Ereignis wird jetzt ausgegeben, wenn die Anfrage abgeschlossen wurde und nicht, wenn die zugrunde liegende Socket geschlossen wird.
v0.4.2Hinzugefügt in: v0.4.2

Wird ausgegeben, wenn die Anfrage abgeschlossen wurde.

message.aborted

Hinzugefügt in: v10.1.0

Veraltet seit: v17.0.0, v16.12.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Überprüfen Sie message.destroyed von <stream.Readable>.

Die Eigenschaft message.aborted ist true, wenn die Anfrage abgebrochen wurde.

message.complete

Hinzugefügt in: v0.3.0

Die Eigenschaft message.complete ist true, wenn eine vollständige HTTP-Nachricht empfangen und erfolgreich analysiert wurde.

Diese Eigenschaft ist besonders nützlich, um festzustellen, ob ein Client oder Server eine Nachricht vollständig übertragen hat, bevor eine Verbindung getrennt wurde:

js
const req = http.request(
  {
    host: '127.0.0.1',
    port: 8080,
    method: 'POST',
  },
  res => {
    res.resume()
    res.on('end', () => {
      if (!res.complete) console.error('Die Verbindung wurde getrennt, während die Nachricht noch gesendet wurde')
    })
  }
)

message.connection

Hinzugefügt in: v0.1.90

Veraltet seit: v16.0.0

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet. Verwenden Sie message.socket.

Alias für message.socket.

message.destroy([error])

[Verlauf]

VersionÄnderungen
v14.5.0, v12.19.0Die Funktion gibt this zurück, um die Konsistenz mit anderen Readable Streams zu gewährleisten.
v0.3.0Hinzugefügt in: v0.3.0

Ruft destroy() auf dem Socket auf, der die IncomingMessage empfangen hat. Wenn error angegeben wird, wird ein 'error'-Ereignis auf dem Socket ausgelöst und error als Argument an alle Listener des Ereignisses übergeben.

message.headers

[Verlauf]

VersionÄnderungen
v19.5.0, v18.14.0Die Option joinDuplicateHeaders in den Funktionen http.request() und http.createServer() stellt sicher, dass doppelte Header nicht verworfen, sondern gemäß RFC 9110 Abschnitt 5.3 mit einem Komma getrennt kombiniert werden.
v15.1.0message.headers wird jetzt mithilfe einer Accessor-Eigenschaft auf dem Prototyp verzögert berechnet und ist nicht mehr aufzählbar.
v0.1.5Hinzugefügt in: v0.1.5

Das Header-Objekt der Anfrage/Antwort.

Schlüssel-Wert-Paare von Header-Namen und -Werten. Header-Namen werden in Kleinbuchstaben umgewandelt.

js
// Gibt etwas Ähnliches aus:
//
// { 'user-agent': 'curl/7.22.0',
//   host: '127.0.0.1:8000',
//   accept: '*/*' }
console.log(request.headers)

Duplikate in Roh-Headern werden wie folgt behandelt, abhängig vom Header-Namen:

  • Duplikate von age, authorization, content-length, content-type, etag, expires, from, host, if-modified-since, if-unmodified-since, last-modified, location, max-forwards, proxy-authorization, referer, retry-after, server oder user-agent werden verworfen. Um zu ermöglichen, dass doppelte Werte der oben aufgeführten Header verbunden werden, verwenden Sie die Option joinDuplicateHeaders in http.request() und http.createServer(). Weitere Informationen finden Sie in RFC 9110 Abschnitt 5.3.
  • set-cookie ist immer ein Array. Duplikate werden dem Array hinzugefügt.
  • Bei doppelten cookie-Headern werden die Werte mit ; verbunden.
  • Bei allen anderen Headern werden die Werte mit , verbunden.

message.headersDistinct

Hinzugefügt in: v18.3.0, v16.17.0

Ähnlich zu message.headers, aber ohne Join-Logik und die Werte sind immer Zeichenketten-Arrays, selbst für Header, die nur einmal empfangen wurden.

js
// Gibt etwas Ähnliches aus:
//
// { 'user-agent': ['curl/7.22.0'],
//   host: ['127.0.0.1:8000'],
//   accept: ['*/*'] }
console.log(request.headersDistinct)

message.httpVersion

Hinzugefügt in: v0.1.1

Im Falle einer Serveranforderung die vom Client gesendete HTTP-Version. Im Falle einer Client-Antwort die HTTP-Version des verbundenen Servers. Wahrscheinlich entweder '1.1' oder '1.0'.

Auch message.httpVersionMajor ist die erste ganze Zahl und message.httpVersionMinor die zweite.

message.method

Hinzugefügt in: v0.1.1

Nur gültig für Anfragen, die von http.Server erhalten wurden.

Die Anforderungsmethode als Zeichenkette. Schreibgeschützt. Beispiele: 'GET', 'DELETE'.

message.rawHeaders

Hinzugefügt in: v0.11.6

Die Liste der Rohdaten von Anfrage-/Antwort-Headern genau so, wie sie empfangen wurden.

Schlüssel und Werte befinden sich in derselben Liste. Es ist keine Liste von Tupeln. Daher sind die gerade indizierten Offsets Schlüsselwerte und die ungerade indizierten Offsets die zugehörigen Werte.

Header-Namen werden nicht in Kleinbuchstaben umgewandelt, und Duplikate werden nicht zusammengeführt.

js
// Gibt etwas Ähnliches aus:
//
// [ 'user-agent',
//   'this is invalid because there can be only one',
//   'User-Agent',
//   'curl/7.22.0',
//   'Host',
//   '127.0.0.1:8000',
//   'ACCEPT',
//   '*/*' ]
console.log(request.rawHeaders)

message.rawTrailers

Hinzugefügt in: v0.11.6

Die Rohdaten der Anfrage-/Antwort-Trailer-Schlüssel und -Werte genau so, wie sie empfangen wurden. Nur im 'end'-Ereignis gefüllt.

message.setTimeout(msecs[, callback])

Hinzugefügt in: v0.5.9

Ruft message.socket.setTimeout(msecs, callback) auf.

message.socket

Hinzugefügt in: v0.3.0

Das net.Socket-Objekt, das mit der Verbindung assoziiert ist.

Bei HTTPS-Unterstützung verwenden Sie request.socket.getPeerCertificate(), um die Authentifizierungsdetails des Clients zu erhalten.

Diese Eigenschaft ist garantiert eine Instanz der <net.Socket>-Klasse, einer Unterklasse von <stream.Duplex>, es sei denn, der Benutzer hat einen anderen Socket-Typ als <net.Socket> angegeben oder intern auf null gesetzt.

message.statusCode

Hinzugefügt in: v0.1.1

Nur gültig für Antworten, die von http.ClientRequest erhalten wurden.

Der dreistellige HTTP-Antwortstatuscode. Z. B. 404.

message.statusMessage

Hinzugefügt in: v0.11.10

Nur gültig für Antworten, die von http.ClientRequest erhalten wurden.

Die HTTP-Antwortstatusmeldung (Reason Phrase). Z. B. OK oder Internal Server Error.

message.trailers

Hinzugefügt in: v0.3.0

Das Objekt für Request/Response-Trailer. Nur beim 'end'-Ereignis gefüllt.

message.trailersDistinct

Hinzugefügt in: v18.3.0, v16.17.0

Ähnlich zu message.trailers, aber es gibt keine Join-Logik und die Werte sind immer Arrays von Strings, auch für Header, die nur einmal empfangen wurden. Nur beim 'end'-Ereignis gefüllt.

message.url

Hinzugefügt in: v0.1.90

Nur gültig für Anfragen, die von http.Server abgerufen wurden.

Request-URL-Zeichenkette. Diese enthält nur die URL, die in der tatsächlichen HTTP-Anfrage vorhanden ist. Betrachten Sie die folgende Anfrage:

GET /status?name=ryan HTTP/1.1 Accept: text/plain

So wird die URL in ihre Bestandteile zerlegt:

js
new URL(`http://${process.env.HOST ?? 'localhost'}${request.url}`)

Wenn request.url '/status?name=ryan' und process.env.HOST undefiniert ist:

bash
$ node
> new URL(`http://${process.env.HOST ?? 'localhost'}${request.url}`);
URL {
  href: 'http://localhost/status?name=ryan',
  origin: 'http://localhost',
  protocol: 'http:',
  username: '',
  password: '',
  host: 'localhost',
  hostname: 'localhost',
  port: '',
  pathname: '/status',
  search: '?name=ryan',
  searchParams: URLSearchParams { 'name' => 'ryan' },
  hash: ''
}

Stellen Sie sicher, dass Sie process.env.HOST auf den Hostnamen des Servers setzen, oder erwägen Sie, diesen Teil vollständig zu ersetzen. Wenn Sie req.headers.host verwenden, stellen Sie sicher, dass eine ordnungsgemäße Validierung verwendet wird, da Clients einen benutzerdefinierten Host-Header angeben können.

Klasse: http.OutgoingMessage

Hinzugefügt in: v0.1.17

Diese Klasse dient als Oberklasse von http.ClientRequest und http.ServerResponse. Sie ist eine abstrakte ausgehende Nachricht aus der Perspektive der Teilnehmer einer HTTP-Transaktion.

Ereignis: 'drain'

Hinzugefügt in: v0.3.6

Wird ausgegeben, wenn der Puffer der Nachricht wieder frei ist.

Ereignis: 'finish'

Hinzugefügt in: v0.1.17

Wird ausgegeben, wenn die Übertragung erfolgreich abgeschlossen wurde.

Ereignis: 'prefinish'

Hinzugefügt in: v0.11.6

Wird nach dem Aufruf von outgoingMessage.end() ausgegeben. Wenn das Ereignis ausgegeben wird, wurden alle Daten verarbeitet, aber möglicherweise noch nicht vollständig geleert.

outgoingMessage.addTrailers(headers)

Hinzugefügt in: v0.3.0

Fügt HTTP-Trailer (Header am Ende der Nachricht) zur Nachricht hinzu.

Trailer werden nur ausgegeben, wenn die Nachricht chunked codiert ist. Andernfalls werden die Trailer stillschweigend verworfen.

HTTP erfordert, dass der Trailer-Header gesendet wird, um Trailer auszugeben, mit einer Liste von Header-Feldnamen in seinem Wert, z. B.:

js
message.writeHead(200, { 'Content-Type': 'text/plain', Trailer: 'Content-MD5' })
message.write(fileData)
message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' })
message.end()

Der Versuch, einen Header-Feldnamen oder -wert festzulegen, der ungültige Zeichen enthält, führt zu einem geworfenen TypeError.

outgoingMessage.appendHeader(name, value)

Hinzugefügt in: v18.3.0, v16.17.0

Fügt einen einzelnen Header-Wert zum Header-Objekt hinzu.

Wenn der Wert ein Array ist, entspricht dies dem mehrmaligen Aufrufen dieser Methode.

Wenn es keine vorherigen Werte für den Header gab, entspricht dies dem Aufrufen von outgoingMessage.setHeader(name, value).

Abhängig vom Wert von options.uniqueHeaders, wenn die Clientanforderung oder der Server erstellt wurden, wird dies dazu führen, dass der Header mehrmals oder einmal mit Werten gesendet wird, die mit ; verbunden sind.

outgoingMessage.connection

Hinzugefügt in: v0.3.0

Veraltet seit: v15.12.0, v14.17.1

[Stabil: 0 - Veraltet]

Stabil: 0 Stabilität: 0 - Veraltet: Verwenden Sie stattdessen outgoingMessage.socket.

Alias von outgoingMessage.socket.

outgoingMessage.cork()

Hinzugefügt in: v13.2.0, v12.16.0

Siehe writable.cork().

outgoingMessage.destroy([error])

Hinzugefügt in: v0.3.0

  • error <Error> Optional, ein Fehler, der mit dem Ereignis error ausgegeben werden soll
  • Rückgabewert: <this>

Zerstört die Nachricht. Sobald ein Socket der Nachricht zugeordnet und verbunden ist, wird auch dieser Socket zerstört.

outgoingMessage.end(chunk[, encoding][, callback])

[Verlauf]

VersionÄnderungen
v15.0.0Der Parameter chunk kann jetzt ein Uint8Array sein.
v0.11.6callback-Argument hinzugefügt.
v0.1.90Hinzugefügt in: v0.1.90

Beendet die ausgehende Nachricht. Wenn Teile des Körpers nicht gesendet wurden, werden sie an das zugrunde liegende System gespült. Wenn die Nachricht geteilt ist, wird das abschließende Chunk 0\r\n\r\n gesendet, und die Trailer (falls vorhanden) werden gesendet.

Wenn chunk angegeben ist, entspricht dies dem Aufruf von outgoingMessage.write(chunk, encoding), gefolgt von outgoingMessage.end(callback).

Wenn callback angegeben ist, wird es aufgerufen, wenn die Nachricht beendet ist (entspricht einem Listener des Ereignisses 'finish').

outgoingMessage.flushHeaders()

Hinzugefügt in: v1.6.0

Spült die Nachrichtenheader.

Aus Effizienzgründen puffert Node.js die Nachrichtenheader normalerweise, bis outgoingMessage.end() aufgerufen wird oder der erste Chunk von Nachrichten Daten geschrieben wird. Anschließend versucht es, die Header und Daten in ein einzelnes TCP-Paket zu packen.

Dies ist in der Regel wünschenswert (es spart einen TCP-Roundtrip), aber nicht, wenn die ersten Daten erst viel später gesendet werden. outgoingMessage.flushHeaders() umgeht die Optimierung und startet die Nachricht.

outgoingMessage.getHeader(name)

Hinzugefügt in: v0.4.0

Ruft den Wert des HTTP-Headers mit dem angegebenen Namen ab. Wenn dieser Header nicht gesetzt ist, ist der Rückgabewert undefined.

outgoingMessage.getHeaderNames()

Hinzugefügt in: v7.7.0

Gibt ein Array zurück, das die eindeutigen Namen der aktuellen ausgehenden Header enthält. Alle Namen sind Kleinbuchstaben.

outgoingMessage.getHeaders()

Hinzugefügt in: v7.7.0

Gibt eine flache Kopie der aktuellen ausgehenden Header zurück. Da eine flache Kopie verwendet wird, können Array-Werte ohne zusätzliche Aufrufe verschiedener headerbezogener HTTP-Modulmethoden verändert werden. Die Schlüssel des zurückgegebenen Objekts sind die Header-Namen und die Werte sind die jeweiligen Header-Werte. Alle Header-Namen sind Kleinbuchstaben.

Das von der Methode outgoingMessage.getHeaders() zurückgegebene Objekt erbt nicht prototypisch vom JavaScript-Object. Dies bedeutet, dass typische Object-Methoden wie obj.toString(), obj.hasOwnProperty() und andere nicht definiert sind und nicht funktionieren werden.

js
outgoingMessage.setHeader('Foo', 'bar')
outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz'])

const headers = outgoingMessage.getHeaders()
// headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }

outgoingMessage.hasHeader(name)

Hinzugefügt in: v7.7.0

Gibt true zurück, wenn der durch name identifizierte Header aktuell in den ausgehenden Headern gesetzt ist. Der Header-Name ist nicht Groß-/Kleinschreibungsempfindlich.

js
const hasContentType = outgoingMessage.hasHeader('content-type')

outgoingMessage.headersSent

Hinzugefügt in: v0.9.3

Schreibgeschützt. true, wenn die Header gesendet wurden, andernfalls false.

outgoingMessage.pipe()

Hinzugefügt in: v9.0.0

Überschreibt die stream.pipe()-Methode, die von der Legacy-Stream-Klasse geerbt wurde, der Oberklasse von http.OutgoingMessage.

Der Aufruf dieser Methode löst einen Error aus, da outgoingMessage ein schreibgeschützter Stream ist.

outgoingMessage.removeHeader(name)

Hinzugefügt in: v0.4.0

Entfernt einen Header, der für den impliziten Versand in der Warteschlange steht.

js
outgoingMessage.removeHeader('Content-Encoding')

outgoingMessage.setHeader(name, value)

Hinzugefügt in: v0.4.0

Setzt einen einzelnen Header-Wert. Wenn der Header bereits in den zu sendenden Headern vorhanden ist, wird sein Wert ersetzt. Verwenden Sie ein Array von Zeichenketten, um mehrere Header mit demselben Namen zu senden.

outgoingMessage.setHeaders(headers)

Hinzugefügt in: v19.6.0, v18.15.0

Setzt mehrere Header-Werte für implizite Header. headers muss eine Instanz von Headers oder Map sein. Wenn ein Header bereits in den zu sendenden Headern vorhanden ist, wird sein Wert ersetzt.

js
const headers = new Headers({ foo: 'bar' })
outgoingMessage.setHeaders(headers)

oder

js
const headers = new Map([['foo', 'bar']])
outgoingMessage.setHeaders(headers)

Wenn Header mit outgoingMessage.setHeaders() gesetzt wurden, werden sie mit allen Headern zusammengeführt, die an response.writeHead() übergeben werden, wobei die an response.writeHead() übergebenen Header Vorrang haben.

js
// Gibt content-type = text/plain zurück
const server = http.createServer((req, res) => {
  const headers = new Headers({ 'Content-Type': 'text/html' })
  res.setHeaders(headers)
  res.writeHead(200, { 'Content-Type': 'text/plain' })
  res.end('ok')
})

outgoingMessage.setTimeout(msesc[, callback])

Hinzugefügt in: v0.9.12

  • msesc <number>
  • callback <Function> Optionale Funktion, die aufgerufen wird, wenn ein Timeout auftritt. Analog zum Binden an das timeout-Ereignis.
  • Rückgabewert: <this>

Sobald eine Socket mit der Nachricht verbunden und verbunden ist, wird socket.setTimeout() mit msecs als erstem Parameter aufgerufen.

outgoingMessage.socket

Hinzugefügt in: v0.3.0

Referenz auf die zugrunde liegende Socket. Normalerweise sollten Benutzer auf diese Eigenschaft nicht zugreifen.

Nach dem Aufruf von outgoingMessage.end() wird diese Eigenschaft auf null gesetzt.

outgoingMessage.uncork()

Hinzugefügt in: v13.2.0, v12.16.0

Siehe writable.uncork()

outgoingMessage.writableCorked

Hinzugefügt in: v13.2.0, v12.16.0

Die Anzahl der Aufrufe von outgoingMessage.cork().

outgoingMessage.writableEnded

Hinzugefügt in: v12.9.0

Ist true, wenn outgoingMessage.end() aufgerufen wurde. Diese Eigenschaft gibt nicht an, ob die Daten gespült wurden. Verwenden Sie dazu stattdessen message.writableFinished.

outgoingMessage.writableFinished

Hinzugefügt in: v12.7.0

Ist true, wenn alle Daten an das zugrunde liegende System gespült wurden.

outgoingMessage.writableHighWaterMark

Hinzugefügt in: v12.9.0

Das highWaterMark der zugrunde liegenden Socket, falls zugewiesen. Andernfalls der Standardpufferpegel, wenn writable.write() false zurückgibt (16384).

outgoingMessage.writableLength

Hinzugefügt in: v12.9.0

Die Anzahl der gepufferten Bytes.

outgoingMessage.writableObjectMode

Hinzugefügt in: v12.9.0

Immer false.

outgoingMessage.write(chunk[, encoding][, callback])

[Verlauf]

VersionÄnderungen
v15.0.0Der Parameter chunk kann nun ein Uint8Array sein.
v0.11.6Das Argument callback wurde hinzugefügt.
v0.1.29Hinzugefügt in: v0.1.29

Sendet einen Teil des Body. Diese Methode kann mehrfach aufgerufen werden.

Das Argument encoding ist nur relevant, wenn chunk eine Zeichenkette ist. Standardmäßig ist es 'utf8'.

Das Argument callback ist optional und wird aufgerufen, wenn dieser Datenabschnitt gespült wurde.

Gibt true zurück, wenn die gesamten Daten erfolgreich in den Kernel-Puffer gespült wurden. Gibt false zurück, wenn alle oder ein Teil der Daten im Benutzerspeicher gepuffert wurde. Das Ereignis 'drain' wird ausgegeben, wenn der Puffer wieder frei ist.

http.METHODS

Hinzugefügt in: v0.11.8

Eine Liste der HTTP-Methoden, die vom Parser unterstützt werden.

http.STATUS_CODES

Hinzugefügt in: v0.1.22

Eine Sammlung aller Standard-HTTP-Antwortstatuscodes und deren Kurzbeschreibung. Beispielsweise ist http.STATUS_CODES[404] === 'Not Found'.

http.createServer([options][, requestListener])

[Verlauf]

VersionÄnderungen
v20.1.0, v18.17.0Die Option highWaterMark wird jetzt unterstützt.
v18.0.0Die Optionen requestTimeout, headersTimeout, keepAliveTimeout und connectionsCheckingInterval werden jetzt unterstützt.
v18.0.0Die Option noDelay hat jetzt den Standardwert true.
v17.7.0, v16.15.0Die Optionen noDelay, keepAlive und keepAliveInitialDelay werden jetzt unterstützt.
v13.3.0Die Option maxHeaderSize wird jetzt unterstützt.
v13.8.0, v12.15.0, v10.19.0Die Option insecureHTTPParser wird jetzt unterstützt.
v9.6.0, v8.12.0Das Argument options wird jetzt unterstützt.
v0.1.13Hinzugefügt in: v0.1.13
  • options <Object>

    • connectionsCheckingInterval: Legt den Intervallwert in Millisekunden fest, um bei unvollständigen Anforderungen nach Anforderungs- und Header-Zeitüberschreitungen zu suchen. Standard: 30000.
    • headersTimeout: Legt den Timeout-Wert in Millisekunden für den Empfang der vollständigen HTTP-Header vom Client fest. Weitere Informationen finden Sie unter server.headersTimeout. Standard: 60000.
    • highWaterMark <number> Überschreibt optional die readableHighWaterMark und writableHighWaterMark aller sockets. Dies wirkt sich auf die Eigenschaft highWaterMark sowohl von IncomingMessage als auch von ServerResponse aus. Standard: Siehe stream.getDefaultHighWaterMark().
    • insecureHTTPParser <boolean> Wenn auf true gesetzt, wird ein HTTP-Parser mit aktivierten Nachsichtigkeitsflags verwendet. Die Verwendung des unsicheren Parsers sollte vermieden werden. Weitere Informationen finden Sie unter --insecure-http-parser. Standard: false.
    • IncomingMessage <http.IncomingMessage> Gibt die zu verwendende IncomingMessage-Klasse an. Nützlich zum Erweitern der ursprünglichen IncomingMessage. Standard: IncomingMessage.
    • joinDuplicateHeaders <boolean> Wenn auf true gesetzt, ermöglicht diese Option das Verknüpfen der Feldzeilenwerte mehrerer Header in einer Anfrage mit einem Komma (, ), anstatt die Duplikate zu verwerfen. Weitere Informationen finden Sie unter message.headers. Standard: false.
    • keepAlive <boolean> Wenn auf true gesetzt, aktiviert dies die Keep-Alive-Funktionalität auf dem Socket unmittelbar nach dem Empfang einer neuen eingehenden Verbindung, ähnlich wie in [socket.setKeepAlive([enable][, initialDelay])][socket.setKeepAlive(enable, initialDelay)]. Standard: false.
    • keepAliveInitialDelay <number> Wenn auf eine positive Zahl gesetzt, legt dies die anfängliche Verzögerung fest, bevor die erste Keepalive-Abfrage auf einem inaktiven Socket gesendet wird. Standard: 0.
    • keepAliveTimeout: Die Anzahl der Millisekunden Inaktivität, die ein Server warten muss, um zusätzliche eingehende Daten zu erhalten, nachdem er die letzte Antwort geschrieben hat, bevor ein Socket zerstört wird. Weitere Informationen finden Sie unter server.keepAliveTimeout. Standard: 5000.
    • maxHeaderSize <number> Überschreibt optional den Wert von --max-http-header-size für Anforderungen, die von diesem Server empfangen werden, d. h. die maximale Länge der Anforderungsheader in Bytes. Standard: 16384 (16 KiB).
    • noDelay <boolean> Wenn auf true gesetzt, deaktiviert dies die Verwendung des Algorithmus von Nagle unmittelbar nach dem Empfang einer neuen eingehenden Verbindung. Standard: true.
    • requestTimeout: Legt den Timeout-Wert in Millisekunden für den Empfang der gesamten Anfrage vom Client fest. Weitere Informationen finden Sie unter server.requestTimeout. Standard: 300000.
    • requireHostHeader <boolean> Wenn auf true gesetzt, zwingt dies den Server, mit einem 400 (Bad Request)-Statuscode auf jede HTTP/1.1-Anforderungsnachricht zu antworten, der ein Host-Header fehlt (wie von der Spezifikation vorgeschrieben). Standard: true.
    • ServerResponse <http.ServerResponse> Gibt die zu verwendende ServerResponse-Klasse an. Nützlich zum Erweitern der ursprünglichen ServerResponse. Standard: ServerResponse.
    • uniqueHeaders <Array> Eine Liste von Antwort-Headern, die nur einmal gesendet werden sollten. Wenn der Wert des Headers ein Array ist, werden die Elemente mit ; verbunden.
    • rejectNonStandardBodyWrites <boolean> Wenn auf true gesetzt, wird ein Fehler ausgelöst, wenn in eine HTTP-Antwort geschrieben wird, die keinen Body hat. Standard: false.
  • requestListener <Function>

  • Gibt zurück: <http.Server>

Gibt eine neue Instanz von http.Server zurück.

Der requestListener ist eine Funktion, die automatisch dem Ereignis 'request' hinzugefügt wird.

js
import http from 'node:http'

// Erstellt einen lokalen Server, um Daten von zu empfangen
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)
js
const http = require('node:http')

// Erstellt einen lokalen Server, um Daten von zu empfangen
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)
js
import http from 'node:http'

// Erstellt einen lokalen Server, um Daten von zu empfangen
const server = http.createServer()

// Lauscht auf das request-Ereignis
server.on('request', (request, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)
js
const http = require('node:http')

// Erstellt einen lokalen Server, um Daten von zu empfangen
const server = http.createServer()

// Lauscht auf das request-Ereignis
server.on('request', (request, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)

http.get(options[, callback])

http.get(url[, options][, callback])

[Historie]

VersionÄnderungen
v10.9.0Der Parameter url kann nun zusammen mit einem separaten options-Objekt übergeben werden.
v7.5.0Der Parameter options kann ein WHATWG URL-Objekt sein.
v0.3.6Hinzugefügt in: v0.3.6

Da die meisten Anfragen GET-Anfragen ohne Body sind, stellt Node.js diese Komfortmethode bereit. Der einzige Unterschied zwischen dieser Methode und http.request() besteht darin, dass sie die Methode standardmäßig auf GET setzt und req.end() automatisch aufruft. Der Callback muss die Antwortdaten aus den in http.ClientRequest angegebenen Gründen verarbeiten.

Der callback wird mit einem einzigen Argument aufgerufen, das eine Instanz von http.IncomingMessage ist.

Beispiel für das Abrufen von JSON:

js
http
  .get('http://localhost:8000/', res => {
    const { statusCode } = res
    const contentType = res.headers['content-type']

    let error
    // Jeder 2xx-Statuscode signalisiert eine erfolgreiche Antwort, aber
    // hier prüfen wir nur auf 200.
    if (statusCode !== 200) {
      error = new Error('Anfrage fehlgeschlagen.\n' + `Statuscode: ${statusCode}`)
    } else if (!/^application\/json/.test(contentType)) {
      error = new Error('Ungültiger Content-Type.\n' + `Erwartet wurde application/json, erhalten wurde ${contentType}`)
    }
    if (error) {
      console.error(error.message)
      // Antwortdaten verarbeiten, um Speicher freizugeben
      res.resume()
      return
    }

    res.setEncoding('utf8')
    let rawData = ''
    res.on('data', chunk => {
      rawData += chunk
    })
    res.on('end', () => {
      try {
        const parsedData = JSON.parse(rawData)
        console.log(parsedData)
      } catch (e) {
        console.error(e.message)
      }
    })
  })
  .on('error', e => {
    console.error(`Fehler erhalten: ${e.message}`)
  })

// Erstellen eines lokalen Servers zum Empfangen von Daten
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' })
  res.end(
    JSON.stringify({
      data: 'Hello World!',
    })
  )
})

server.listen(8000)

http.globalAgent

[Verlauf]

VersionÄnderungen
v19.0.0Der Agent verwendet jetzt standardmäßig HTTP Keep-Alive und ein Timeout von 5 Sekunden.
v0.5.9Hinzugefügt in: v0.5.9

Globale Instanz von Agent, die als Standard für alle HTTP-Client-Anforderungen verwendet wird. Weicht von einer Standardkonfiguration von Agent ab, indem keepAlive aktiviert ist und ein timeout von 5 Sekunden verwendet wird.

http.maxHeaderSize

Hinzugefügt in: v11.6.0, v10.15.0

Schreibgeschützte Eigenschaft, die die maximal zulässige Größe von HTTP-Headern in Bytes angibt. Standardmäßig 16 KiB. Konfigurierbar mit der CLI-Option --max-http-header-size.

Dies kann für Server und Client-Anforderungen überschrieben werden, indem die Option maxHeaderSize übergeben wird.

http.request(options[, callback])

http.request(url[, options][, callback])

[Verlauf]

VersionÄnderungen
v16.7.0, v14.18.0Bei Verwendung eines URL-Objekts werden analysierte Benutzernamen und Passwörter jetzt korrekt URI-decodiert.
v15.3.0, v14.17.0Es ist möglich, eine Anfrage mit einem AbortSignal abzubrechen.
v13.3.0Die Option maxHeaderSize wird jetzt unterstützt.
v13.8.0, v12.15.0, v10.19.0Die Option insecureHTTPParser wird jetzt unterstützt.
v10.9.0Der Parameter url kann jetzt zusammen mit einem separaten options-Objekt übergeben werden.
v7.5.0Der Parameter options kann ein WHATWG URL-Objekt sein.
v0.3.6Hinzugefügt in: v0.3.6
  • url <string> | <URL>

  • options <Object>

    • agent <http.Agent> | <boolean> Steuert das Verhalten von Agent. Mögliche Werte:

    • undefined (Standard): Verwendung von http.globalAgent für diesen Host und Port.

    • Agent-Objekt: explizite Verwendung des übergebenen Agent.

    • false: führt dazu, dass ein neuer Agent mit Standardwerten verwendet wird.

    • auth <string> Basisauthentifizierung ('user:password') zur Berechnung eines Authorization-Headers.

    • createConnection <Function> Eine Funktion, die einen Socket/Stream erzeugt, der für die Anfrage verwendet werden soll, wenn die Option agent nicht verwendet wird. Dies kann verwendet werden, um die Erstellung einer benutzerdefinierten Agent-Klasse zu vermeiden, nur um die Standardfunktion createConnection zu überschreiben. Weitere Informationen finden Sie unter agent.createConnection(). Jeder Duplex-Stream ist ein gültiger Rückgabewert.

    • defaultPort <number> Standardport für das Protokoll. Standard: agent.defaultPort, wenn ein Agent verwendet wird, andernfalls undefined.

    • family <number> IP-Adressfamilie, die bei der Auflösung von host oder hostname verwendet werden soll. Gültige Werte sind 4 oder 6. Wenn nicht angegeben, werden sowohl IP v4 als auch v6 verwendet.

    • headers <Object> Ein Objekt, das Anforderungsheader enthält.

    • hints <number> Optionale dns.lookup() Hinweise.

    • host <string> Ein Domänenname oder eine IP-Adresse des Servers, an den die Anfrage gesendet werden soll. Standard: 'localhost'.

    • hostname <string> Alias für host. Um url.parse() zu unterstützen, wird hostname verwendet, wenn sowohl host als auch hostname angegeben sind.

    • insecureHTTPParser <boolean> Wenn auf true gesetzt, wird ein HTTP-Parser mit aktivierten Nachsichtigkeitsflags verwendet. Die Verwendung des unsicheren Parsers sollte vermieden werden. Weitere Informationen finden Sie unter --insecure-http-parser. Standard: false

    • joinDuplicateHeaders <boolean> Verbindet die Feldzeilenwerte mehrerer Header in einer Anfrage mit , anstatt die Duplikate zu verwerfen. Weitere Informationen finden Sie unter message.headers. Standard: false.

    • localAddress <string> Lokale Schnittstelle, die für Netzwerkverbindungen gebunden werden soll.

    • localPort <number> Lokaler Port, von dem aus eine Verbindung hergestellt werden soll.

    • lookup <Function> Benutzerdefinierte Suchfunktion. Standard: dns.lookup().

    • maxHeaderSize <number> Überschreibt optional den Wert von --max-http-header-size (die maximale Länge der Antwortheader in Bytes) für Antworten, die vom Server empfangen werden. Standard: 16384 (16 KiB).

    • method <string> Eine Zeichenkette, die die HTTP-Anforderungsmethode angibt. Standard: 'GET'.

    • path <string> Anforderungspfad. Sollte die Query-String enthalten, falls vorhanden. Z. B. '/index.html?page=12'. Eine Ausnahme wird ausgelöst, wenn der Anforderungspfad ungültige Zeichen enthält. Derzeit werden nur Leerzeichen abgelehnt, aber dies kann sich in Zukunft ändern. Standard: '/'.

    • port <number> Port des Remoteservers. Standard: defaultPort, falls gesetzt, andernfalls 80.

    • protocol <string> Zu verwendendes Protokoll. Standard: 'http:'.

    • setDefaultHeaders <boolean>: Gibt an, ob Standardheader wie Connection, Content-Length, Transfer-Encoding und Host automatisch hinzugefügt werden sollen. Wenn auf false gesetzt, müssen alle notwendigen Header manuell hinzugefügt werden. Standardmäßig true.

    • setHost <boolean>: Gibt an, ob der Host-Header automatisch hinzugefügt werden soll. Wenn angegeben, überschreibt dies setDefaultHeaders. Standardmäßig true.

    • signal <AbortSignal>: Ein AbortSignal, das verwendet werden kann, um eine laufende Anfrage abzubrechen.

    • socketPath <string> Unix-Domain-Socket. Kann nicht verwendet werden, wenn einer von host oder port angegeben ist, da diese einen TCP-Socket angeben.

    • timeout <number>: Eine Zahl, die das Socket-Timeout in Millisekunden angibt. Dies legt das Timeout fest, bevor der Socket verbunden ist.

    • uniqueHeaders <Array> Eine Liste von Anforderungsheadern, die nur einmal gesendet werden sollen. Wenn der Wert des Headers ein Array ist, werden die Elemente mit ; verbunden.

  • callback <Function>

  • Gibt zurück: <http.ClientRequest>

options in socket.connect() werden ebenfalls unterstützt.

Node.js unterhält mehrere Verbindungen pro Server, um HTTP-Anforderungen zu stellen. Diese Funktion ermöglicht es, Anfragen transparent abzusetzen.

url kann eine Zeichenkette oder ein URL-Objekt sein. Wenn url eine Zeichenkette ist, wird sie automatisch mit new URL() analysiert. Wenn es sich um ein URL-Objekt handelt, wird es automatisch in ein gewöhnliches options-Objekt konvertiert.

Wenn sowohl url als auch options angegeben sind, werden die Objekte zusammengeführt, wobei die options-Eigenschaften Vorrang haben.

Der optionale Parameter callback wird als einmaliger Listener für das Ereignis 'response' hinzugefügt.

http.request() gibt eine Instanz der Klasse http.ClientRequest zurück. Die ClientRequest-Instanz ist ein beschreibbarer Stream. Wenn eine Datei mit einer POST-Anfrage hochgeladen werden muss, schreiben Sie in das ClientRequest-Objekt.

js
import http from 'node:http'
import { Buffer } from 'node:buffer'

const postData = JSON.stringify({
  msg: 'Hello World!',
})

const options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(postData),
  },
}

const req = http.request(options, res => {
  console.log(`STATUS: ${res.statusCode}`)
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`)
  res.setEncoding('utf8')
  res.on('data', chunk => {
    console.log(`BODY: ${chunk}`)
  })
  res.on('end', () => {
    console.log('Keine weiteren Daten in der Antwort.')
  })
})

req.on('error', e => {
  console.error(`Problem mit der Anfrage: ${e.message}`)
})

// Daten an den Anforderungs-Body schreiben
req.write(postData)
req.end()
js
const http = require('node:http')

const postData = JSON.stringify({
  msg: 'Hello World!',
})

const options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(postData),
  },
}

const req = http.request(options, res => {
  console.log(`STATUS: ${res.statusCode}`)
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`)
  res.setEncoding('utf8')
  res.on('data', chunk => {
    console.log(`BODY: ${chunk}`)
  })
  res.on('end', () => {
    console.log('Keine weiteren Daten in der Antwort.')
  })
})

req.on('error', e => {
  console.error(`Problem mit der Anfrage: ${e.message}`)
})

// Daten an den Anforderungs-Body schreiben
req.write(postData)
req.end()

Im Beispiel wurde req.end() aufgerufen. Bei http.request() muss man immer req.end() aufrufen, um das Ende der Anfrage zu signalisieren – auch wenn keine Daten in den Anforderungs-Body geschrieben werden.

Wenn während der Anfrage ein Fehler auftritt (sei es bei der DNS-Auflösung, TCP-Ebenenfehlern oder tatsächlichen HTTP-Parse-Fehlern), wird ein Ereignis 'error' für das zurückgegebene Anforderungsobjekt emittiert. Wie bei allen 'error'-Ereignissen wird der Fehler ausgelöst, wenn keine Listener registriert sind.

Es gibt einige spezielle Header, die beachtet werden sollten.

  • Das Senden eines 'Connection: keep-alive' benachrichtigt Node.js, dass die Verbindung zum Server bis zur nächsten Anfrage beibehalten werden soll.
  • Das Senden eines 'Content-Length'-Headers deaktiviert die standardmäßige Chunked Encoding.
  • Das Senden eines 'Expect'-Headers sendet die Anforderungsheader sofort. Normalerweise sollten bei der Sendung von 'Expect: 100-continue' sowohl ein Timeout als auch ein Listener für das Ereignis 'continue' gesetzt werden. Weitere Informationen finden Sie in RFC 2616 Abschnitt 8.2.3.
  • Das Senden eines Authorization-Headers überschreibt die Verwendung der Option auth zur Berechnung der Basisauthentifizierung.

Beispiel mit einem URL als options:

js
const options = new URL('http://abc:')

const req = http.request(options, res => {
  // ...
})

Bei einer erfolgreichen Anfrage werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • 'socket'

  • 'response'

    • 'data' beliebig oft, auf dem res-Objekt ('data' wird überhaupt nicht emittiert, wenn der Antwortkörper leer ist, z. B. bei den meisten Weiterleitungen)
    • 'end' auf dem res-Objekt
  • 'close'

Im Falle eines Verbindungsfehlers werden die folgenden Ereignisse emittiert:

  • 'socket'
  • 'error'
  • 'close'

Im Falle eines vorzeitigen Verbindungsabbruchs, bevor die Antwort empfangen wird, werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • 'socket'
  • 'error' mit einem Fehler mit der Meldung 'Error: socket hang up' und dem Code 'ECONNRESET'
  • 'close'

Im Falle eines vorzeitigen Verbindungsabbruchs nach Empfang der Antwort werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • 'socket'

  • 'response'

    • 'data' beliebig oft, auf dem res-Objekt
  • (Verbindung hier geschlossen)

  • 'aborted' auf dem res-Objekt

  • 'close'

  • 'error' auf dem res-Objekt mit einem Fehler mit der Meldung 'Error: aborted' und dem Code 'ECONNRESET'

  • 'close' auf dem res-Objekt

Wenn req.destroy() aufgerufen wird, bevor ein Socket zugewiesen wird, werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • (req.destroy() hier aufgerufen)
  • 'error' mit einem Fehler mit der Meldung 'Error: socket hang up' und dem Code 'ECONNRESET' oder dem Fehler, mit dem req.destroy() aufgerufen wurde
  • 'close'

Wenn req.destroy() aufgerufen wird, bevor die Verbindung erfolgreich ist, werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • 'socket'
  • (req.destroy() hier aufgerufen)
  • 'error' mit einem Fehler mit der Meldung 'Error: socket hang up' und dem Code 'ECONNRESET' oder dem Fehler, mit dem req.destroy() aufgerufen wurde
  • 'close'

Wenn req.destroy() aufgerufen wird, nachdem die Antwort empfangen wurde, werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • 'socket'

  • 'response'

    • 'data' beliebig oft, auf dem res-Objekt
  • (req.destroy() hier aufgerufen)

  • 'aborted' auf dem res-Objekt

  • 'close'

  • 'error' auf dem res-Objekt mit einem Fehler mit der Meldung 'Error: aborted' und dem Code 'ECONNRESET' oder dem Fehler, mit dem req.destroy() aufgerufen wurde

  • 'close' auf dem res-Objekt

Wenn req.abort() aufgerufen wird, bevor ein Socket zugewiesen wird, werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • (req.abort() hier aufgerufen)
  • 'abort'
  • 'close'

Wenn req.abort() aufgerufen wird, bevor die Verbindung erfolgreich ist, werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • 'socket'
  • (req.abort() hier aufgerufen)
  • 'abort'
  • 'error' mit einem Fehler mit der Meldung 'Error: socket hang up' und dem Code 'ECONNRESET'
  • 'close'

Wenn req.abort() aufgerufen wird, nachdem die Antwort empfangen wurde, werden die folgenden Ereignisse in der folgenden Reihenfolge emittiert:

  • 'socket'

  • 'response'

    • 'data' beliebig oft, auf dem res-Objekt
  • (req.abort() hier aufgerufen)

  • 'abort'

  • 'aborted' auf dem res-Objekt

  • 'error' auf dem res-Objekt mit einem Fehler mit der Meldung 'Error: aborted' und dem Code 'ECONNRESET'.

  • 'close'

  • 'close' auf dem res-Objekt

Das Setzen der Option timeout oder die Verwendung der Funktion setTimeout() bricht die Anfrage nicht ab und führt außer dem Hinzufügen eines 'timeout'-Ereignisses nichts aus.

Das Übergeben eines AbortSignal und das anschließende Aufrufen von abort() auf dem entsprechenden AbortController verhält sich genauso wie das Aufrufen von .destroy() auf der Anfrage. Insbesondere wird das Ereignis 'error' mit einem Fehler mit der Meldung 'AbortError: The operation was aborted', dem Code 'ABORT_ERR' und der cause emittiert, falls eine angegeben wurde.

http.validateHeaderName(name[, label])

[Historie]

VersionÄnderungen
v19.5.0, v18.14.0Der Parameter label wurde hinzugefügt.
v14.3.0Hinzugefügt in: v14.3.0
  • name <string>
  • label <string> Bezeichnung für Fehlermeldung. Standard: 'Header name'.

Führt die Low-Level-Validierungen für den angegebenen name durch, die beim Aufruf von res.setHeader(name, value) durchgeführt werden.

Das Übergeben eines ungültigen Werts als name führt zu einem Auslösen eines TypeError, identifiziert durch code: 'ERR_INVALID_HTTP_TOKEN'.

Es ist nicht notwendig, diese Methode zu verwenden, bevor Header an eine HTTP-Anfrage oder -Antwort übergeben werden. Das HTTP-Modul validiert solche Header automatisch.

Beispiel:

js
import { validateHeaderName } from 'node:http'

try {
  validateHeaderName('')
} catch (err) {
  console.error(err instanceof TypeError) // --> true
  console.error(err.code) // --> 'ERR_INVALID_HTTP_TOKEN'
  console.error(err.message) // --> 'Header name must be a valid HTTP token [""]'
}
js
const { validateHeaderName } = require('node:http')

try {
  validateHeaderName('')
} catch (err) {
  console.error(err instanceof TypeError) // --> true
  console.error(err.code) // --> 'ERR_INVALID_HTTP_TOKEN'
  console.error(err.message) // --> 'Header name must be a valid HTTP token [""]'
}

http.validateHeaderValue(name, value)

Hinzugefügt in: v14.3.0

Führt die Low-Level-Validierungen für den angegebenen value durch, die beim Aufruf von res.setHeader(name, value) durchgeführt werden.

Das Übergeben eines ungültigen Werts als value führt zu einem Auslösen eines TypeError.

  • Fehler bei undefinierten Werten wird identifiziert durch code: 'ERR_HTTP_INVALID_HEADER_VALUE'.
  • Fehler bei ungültigen Zeichen wird identifiziert durch code: 'ERR_INVALID_CHAR'.

Es ist nicht notwendig, diese Methode zu verwenden, bevor Header an eine HTTP-Anfrage oder -Antwort übergeben werden. Das HTTP-Modul validiert solche Header automatisch.

Beispiele:

js
import { validateHeaderValue } from 'node:http'

try {
  validateHeaderValue('x-my-header', undefined)
} catch (err) {
  console.error(err instanceof TypeError) // --> true
  console.error(err.code === 'ERR_HTTP_INVALID_HEADER_VALUE') // --> true
  console.error(err.message) // --> 'Invalid value "undefined" for header "x-my-header"'
}

try {
  validateHeaderValue('x-my-header', 'oʊmɪɡə')
} catch (err) {
  console.error(err instanceof TypeError) // --> true
  console.error(err.code === 'ERR_INVALID_CHAR') // --> true
  console.error(err.message) // --> 'Invalid character in header content ["x-my-header"]'
}
js
const { validateHeaderValue } = require('node:http')

try {
  validateHeaderValue('x-my-header', undefined)
} catch (err) {
  console.error(err instanceof TypeError) // --> true
  console.error(err.code === 'ERR_HTTP_INVALID_HEADER_VALUE') // --> true
  console.error(err.message) // --> 'Invalid value "undefined" for header "x-my-header"'
}

try {
  validateHeaderValue('x-my-header', 'oʊmɪɡə')
} catch (err) {
  console.error(err instanceof TypeError) // --> true
  console.error(err.code === 'ERR_INVALID_CHAR') // --> true
  console.error(err.message) // --> 'Invalid character in header content ["x-my-header"]'
}

http.setMaxIdleHTTPParsers(max)

Hinzugefügt in: v18.8.0, v16.18.0

Legt die maximale Anzahl inaktiver HTTP-Parser fest.

WebSocket

Hinzugefügt in: v22.5.0

Eine browserkompatible Implementierung von WebSocket.