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:
{
"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:
;[
'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:
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
:
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.0 | Hinzufügen der Option scheduling zur Angabe der Strategie zur Planung freier Sockets. |
v14.5.0, v12.19.0 | Hinzufügen der Option maxTotalSockets zum Agent-Konstruktor. |
v0.3.4 | Hinzugefü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 demkeep-alive
-Wert desConnection
-Headers. DerConnection: keep-alive
-Header wird immer gesendet, wenn ein Agent verwendet wird, außer wenn derConnection
-Header explizit angegeben ist oder wenn die OptionenkeepAlive
undmaxSockets
auffalse
bzw.Infinity
gesetzt sind, in diesem Fall wirdConnection: close
verwendet. Standard:false
.keepAliveMsecs
<number> Gibt bei Verwendung der OptionkeepAlive
die Anfangsverzögerung für TCP Keep-Alive-Pakete an. Wird ignoriert, wenn die OptionkeepAlive
false
oderundefined
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 WertmaxSockets
erreicht ist. Wenn der Host versucht, mehr Verbindungen alsmaxSockets
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 maximalmaxSockets
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, wennkeepAlive
auftrue
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.
import { Agent, request } from 'node:http'
const keepAliveAgent = new Agent({ keepAlive: true })
options.agent = keepAliveAgent
request(options, onResponseCallback)
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
options
<Object> Optionen mit Verbindungsdetails. Überprüfen Sienet.createConnection()
für das Format der Optionencallback
<Function> Callback-Funktion, die den erstellten Socket empfängt- Gibt zurück: <stream.Duplex>
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
socket
<stream.Duplex>
Wird aufgerufen, wenn socket
von einer Anfrage getrennt wird und vom Agent
beibehalten werden könnte. Das Standardverhalten ist:
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
socket
<stream.Duplex>request
<http.ClientRequest>
Wird aufgerufen, wenn socket
nach dem Beibehalten aufgrund der Keep-Alive-Optionen an request
angehängt wird. Das Standardverhalten ist:
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.0 | Das Property hat nun einen null -Prototypen. |
v0.11.4 | Hinzugefü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.0 | Der Parameter options ist jetzt optional. |
v0.11.4 | Hinzugefügt in: v0.11.4 |
options
<Objekt> Ein Satz von Optionen, die Informationen zur Namensgenerierung bereitstellenhost
<Zeichenkette> Ein Domänenname oder eine IP-Adresse des Servers, an den die Anfrage gesendet werden sollport
<Zahl> Port des entfernten ServerslocalAddress
<Zeichenkette> Lokale Schnittstelle, die für Netzwerkverbindungen gebunden werden soll, wenn die Anfrage gesendet wirdfamily
<Ganzzahl> Muss 4 oder 6 sein, wenn dies nicht gleichundefined
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.0 | Die Eigenschaft hat jetzt einen null -Prototyp. |
v0.5.9 | Hinzugefü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.0 | Die Eigenschaft hat jetzt einen null -Prototyp. |
v0.3.6 | Hinzugefü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
- Erweitert: <http.OutgoingMessage>
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
response
<http.IncomingMessage>socket
<stream.Duplex>head
<Buffer>
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:
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()
})
})
})
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
info
<Objekt>
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.
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}`)
})
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
response
<http.IncomingMessage>
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
socket
<stream.Duplex>
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
response
<http.IncomingMessage>socket
<stream.Duplex>head
<Buffer>
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.
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)
})
})
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.0 | Veraltet seit: v17.0.0, v16.12.0 |
v11.0.0 | Die Eigenschaft aborted ist keine Zeitstempelnummer mehr. |
v0.11.14 | Hinzugefü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.0 | Der Parameter data kann nun ein Uint8Array sein. |
v10.0.0 | Diese Methode gibt jetzt einen Verweis auf ClientRequest zurück. |
v0.1.90 | Hinzugefügt in: v0.1.90 |
data
<string> | <Buffer> | <Uint8Array>encoding
<string>callback
<Function>- Rückgabewert: <this>
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.0 | Die Funktion gibt this zurück, um die Konsistenz mit anderen Readable Streams zu gewährleisten. |
v0.3.0 | 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 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.
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
- Rückgabewert: <string[]>
Gibt ein Array zurück, das die eindeutigen Namen der aktuellen ausgehenden Header enthält. Alle Header-Namen sind klein geschrieben.
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
- Rückgabewert: <Object>
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.
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
- Rückgabewert: <string[]>
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.
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.
const hasContentType = request.hasHeader('content-type')
request.maxHeadersCount
- <number> Standardwert:
2000
Begrenzt die maximale Anzahl an Antwortheadern. Wenn auf 0 gesetzt, wird keine Begrenzung angewendet.
request.path
Hinzugefügt in: v0.4.0
- <string> Der Request-Pfad.
request.method
Hinzugefügt in: v0.1.97
- <string> Die Request-Methode.
request.host
Hinzugefügt in: v14.5.0, v12.19.0
- <string> Der Request-Host.
request.protocol
Hinzugefügt in: v14.5.0, v12.19.0
- <string> Das Request-Protokoll.
request.removeHeader(name)
Hinzugefügt in: v1.6.0
name
<string>
Entfernt einen Header, der bereits im Header-Objekt definiert ist.
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.
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
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.
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()
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.
request.setHeader('Content-Type', 'application/json')
oder
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.
const filename = 'Rock 🎵.txt'
request.setHeader('Content-Disposition', `attachment; filename*=utf-8''${encodeURIComponent(filename)}`)
request.setNoDelay([noDelay])
Hinzugefügt in: v0.5.9
noDelay
<boolean>
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.0 | Socket-Timeout wird nur konsistent gesetzt, wenn die Socket-Verbindung hergestellt ist. |
v0.5.9 | Hinzugefü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.
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
})
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.0 | Der Parameter chunk kann jetzt ein Uint8Array sein. |
v0.1.29 | Hinzugefügt in: v0.1.29 |
chunk
<string> | <Buffer> | <Uint8Array>encoding
<string>callback
<Function>- Rückgabewert: <boolean>
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
- Erweitert: <net.Server>
Ereignis: 'checkContinue'
Hinzugefügt in: v0.3.0
request
<http.IncomingMessage>response
<http.ServerResponse>
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
request
<http.IncomingMessage>response
<http.ServerResponse>
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.0 | Das Standardverhalten gibt einen 431 Request Header Fields Too Large zurück, wenn ein HPE_HEADER_OVERFLOW-Fehler auftritt. |
v9.4.0 | Das 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.0 | Die Standardaktion, .destroy() auf dem socket aufzurufen, findet nicht mehr statt, wenn Listener für 'clientError' angehängt sind. |
v0.1.94 | Hinzugefügt in: v0.1.94 |
exception
<Error>socket
<stream.Duplex>
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.
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)
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.
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
request
<http.IncomingMessage> Argumente für die HTTP-Anfrage, wie sie im Ereignis'request'
vorhanden sindsocket
<stream.Duplex> Netzwerk-Socket zwischen Server und Clienthead
<Buffer> Das erste Paket des Tunneling-Streams (kann leer sein)
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
socket
<stream.Duplex>
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
request
<http.IncomingMessage> Argumente für die HTTP-Anfrage, wie im Ereignis'request'
socket
<stream.Duplex> Netzwerksocket zwischen Server und Client
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
request
<http.IncomingMessage>response
<http.ServerResponse>
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.0 | Das Nicht-Beobachten dieses Ereignisses führt nicht mehr zur Zerstörung des Sockets, wenn ein Client einen Upgrade-Header sendet. |
v0.1.94 | Hinzugefügt in: v0.1.94 |
request
<http.IncomingMessage> Argumente für die HTTP-Anfrage, wie im Ereignis'request'
socket
<stream.Duplex> Netzwerksocket zwischen Server und Clienthead
<Buffer> Das erste Paket des aktualisierten Streams (kann leer sein)
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.0 | Die Methode schließt inaktive Verbindungen, bevor sie zurückkehrt. |
v0.1.90 | Hinzugefügt in: v0.1.90 |
callback
<Funktion>
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()
.
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.
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.
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.0 | Der Standardwert ist jetzt das Minimum zwischen 60000 (60 Sekunden) oder requestTimeout . |
v11.3.0, v10.14.0 | Hinzugefügt in: v11.3.0, v10.14.0 |
- <number> Standard: Das Minimum zwischen
server.requestTimeout
oder60000
.
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
- <number> Standard:
2000
Begrenzt die maximale Anzahl eingehender Header. Wenn auf 0 gesetzt, wird keine Begrenzung angewendet.
server.requestTimeout
[Versionsgeschichte]
Version | Änderungen |
---|---|
v18.0.0 | Das Standard-Request-Timeout wurde von keinem Timeout auf 300 Sekunden (5 Minuten) geändert. |
v14.11.0 | Hinzugefügt in: v14.11.0 |
- <number> Standard:
300000
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.0 | Das Standard-Timeout wurde von 120s auf 0 (kein Timeout) geändert. |
v0.9.12 | Hinzugefügt in: v0.9.12 |
msecs
<number> Standard: 0 (kein Timeout)callback
<Function>- Rückgabewert: <http.Server>
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.0 | Das Standard-Timeout wurde von 120s auf 0 (kein Timeout) geändert. |
v0.9.12 | Hinzugefü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
- Erweitert: <http.OutgoingMessage>
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
headers
<Object>
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.:
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.0 | Der Parameter data kann jetzt ein Uint8Array sein. |
v10.0.0 | Diese Methode gibt jetzt einen Verweis auf ServerResponse zurück. |
v0.1.90 | Hinzugefügt in: v0.1.90 |
data
<string> | <Buffer> | <Uint8Array>encoding
<string>callback
<Function>- Gibt zurück: <this>
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.
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 zurück: <string[]>
Gibt ein Array zurück, das die eindeutigen Namen der aktuellen ausgehenden Header enthält. Alle Header-Namen sind Kleinbuchstaben.
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
- Rückgabewert: <Object>
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.
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.
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
name
<string>
Entfernt einen Header, der für den impliziten Versand in die Warteschlange eingereiht wurde.
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
name
<string>value
<any>- Rückgabewert: <http.ServerResponse>
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.
response.setHeader('Content-Type', 'text/html')
oder
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.
// 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
msecs
<number>callback
<Function>- Rückgabewert: <http.ServerResponse>
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.
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)
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
- <number> Standard:
200
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.
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.
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
- <boolean> Standardwert:
false
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.0 | Der Parameter chunk kann jetzt ein Uint8Array sein. |
v0.1.29 | Hinzugefügt in: v0.1.29 |
chunk
<string> | <Buffer> | <Uint8Array>encoding
<string> Standardwert:'utf8'
callback
<Function>- Rückgabewert: <boolean>
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.0 | Erlaubt das Übergeben von Hints als Objekt. |
v18.11.0 | Hinzugefügt in: v18.11.0 |
hints
<Object>callback
<Function>
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
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.0 | Erlaubt das Übergeben von Headers als Array. |
v11.10.0, v10.17.0 | Gibt this von writeHead() zurück, um das Verketten mit end() zu ermöglichen. |
v5.11.0, v4.4.5 | Ein RangeError wird geworfen, wenn statusCode keine Zahl im Bereich [100, 999] ist. |
v0.1.30 | Hinzugefügt in: v0.1.30 |
statusCode
<number>statusMessage
<string>headers
<Object> | <Array>- Gibt zurück: <http.ServerResponse>
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.
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()
.
// 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.0 | Der Wert destroyed gibt true zurück, nachdem die eingehenden Daten verbraucht wurden. |
v13.1.0, v12.16.0 | Der Wert readableHighWaterMark spiegelt den Wert des Sockets wider. |
v0.1.17 | Hinzugefügt in: v0.1.17 |
- Erweitert: <stream.Readable>
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.0 | Das Close-Ereignis wird jetzt ausgegeben, wenn die Anfrage abgeschlossen wurde und nicht, wenn die zugrunde liegende Socket geschlossen wird. |
v0.4.2 | Hinzugefü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:
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.0 | Die Funktion gibt this zurück, um die Konsistenz mit anderen Readable Streams zu gewährleisten. |
v0.3.0 | Hinzugefü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.0 | Die 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.0 | message.headers wird jetzt mithilfe einer Accessor-Eigenschaft auf dem Prototyp verzögert berechnet und ist nicht mehr aufzählbar. |
v0.1.5 | Hinzugefü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.
// 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
oderuser-agent
werden verworfen. Um zu ermöglichen, dass doppelte Werte der oben aufgeführten Header verbunden werden, verwenden Sie die OptionjoinDuplicateHeaders
inhttp.request()
undhttp.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.
// 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.
// 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
msecs
<number>callback
<Function>- Rückgabewert: <http.IncomingMessage>
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:
new URL(`http://${process.env.HOST ?? 'localhost'}${request.url}`)
Wenn request.url
'/status?name=ryan'
und process.env.HOST
undefiniert ist:
$ 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
- Erweitert: <Stream>
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
headers
<Object>
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.:
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
name
<string> Header-Namevalue
<string> | <string[]> Header-Wert- Rückgabewert: <this>
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 Ereigniserror
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.0 | Der Parameter chunk kann jetzt ein Uint8Array sein. |
v0.11.6 | callback -Argument hinzugefügt. |
v0.1.90 | Hinzugefügt in: v0.1.90 |
chunk
<string> | <Buffer> | <Uint8Array>encoding
<string> Optional, Standardwert:utf8
callback
<Function> Optional- Rückgabewert: <this>
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
name
<string> Name des Headers- Rückgabewert: <string> | <undefined>
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
- Rückgabewert: <string[]>
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
- Rückgabewert: <Object>
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.
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.
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
name
<string> Header-Name
Entfernt einen Header, der für den impliziten Versand in der Warteschlange steht.
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.
const headers = new Headers({ foo: 'bar' })
outgoingMessage.setHeaders(headers)
oder
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.
// 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 dastimeout
-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.0 | Der Parameter chunk kann nun ein Uint8Array sein. |
v0.11.6 | Das Argument callback wurde hinzugefügt. |
v0.1.29 | Hinzugefügt in: v0.1.29 |
chunk
<string> | <Buffer> | <Uint8Array>encoding
<string> Standard:utf8
callback
<Function>- Rückgabewert: <boolean>
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.0 | Die Option highWaterMark wird jetzt unterstützt. |
v18.0.0 | Die Optionen requestTimeout , headersTimeout , keepAliveTimeout und connectionsCheckingInterval werden jetzt unterstützt. |
v18.0.0 | Die Option noDelay hat jetzt den Standardwert true . |
v17.7.0, v16.15.0 | Die Optionen noDelay , keepAlive und keepAliveInitialDelay werden jetzt unterstützt. |
v13.3.0 | Die Option maxHeaderSize wird jetzt unterstützt. |
v13.8.0, v12.15.0, v10.19.0 | Die Option insecureHTTPParser wird jetzt unterstützt. |
v9.6.0, v8.12.0 | Das Argument options wird jetzt unterstützt. |
v0.1.13 | Hinzugefü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 unterserver.headersTimeout
. Standard:60000
.highWaterMark
<number> Überschreibt optional diereadableHighWaterMark
undwritableHighWaterMark
allersocket
s. Dies wirkt sich auf die EigenschafthighWaterMark
sowohl vonIncomingMessage
als auch vonServerResponse
aus. Standard: Siehestream.getDefaultHighWaterMark()
.insecureHTTPParser
<boolean> Wenn auftrue
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 verwendendeIncomingMessage
-Klasse an. Nützlich zum Erweitern der ursprünglichenIncomingMessage
. Standard:IncomingMessage
.joinDuplicateHeaders
<boolean> Wenn auftrue
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 untermessage.headers
. Standard:false
.keepAlive
<boolean> Wenn auftrue
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 unterserver.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 auftrue
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 unterserver.requestTimeout
. Standard:300000
.requireHostHeader
<boolean> Wenn auftrue
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 verwendendeServerResponse
-Klasse an. Nützlich zum Erweitern der ursprünglichenServerResponse
. 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 auftrue
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.
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)
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)
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)
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.0 | Der Parameter url kann nun zusammen mit einem separaten options -Objekt übergeben werden. |
v7.5.0 | Der Parameter options kann ein WHATWG URL -Objekt sein. |
v0.3.6 | Hinzugefügt in: v0.3.6 |
url
<string> | <URL>options
<Object> Akzeptiert die gleichenoptions
wiehttp.request()
, wobei die Methode standardmäßig auf GET gesetzt ist.callback
<Function>- Rückgabewert: <http.ClientRequest>
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:
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.0 | Der Agent verwendet jetzt standardmäßig HTTP Keep-Alive und ein Timeout von 5 Sekunden. |
v0.5.9 | Hinzugefü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.0 | Bei Verwendung eines URL -Objekts werden analysierte Benutzernamen und Passwörter jetzt korrekt URI-decodiert. |
v15.3.0, v14.17.0 | Es ist möglich, eine Anfrage mit einem AbortSignal abzubrechen. |
v13.3.0 | Die Option maxHeaderSize wird jetzt unterstützt. |
v13.8.0, v12.15.0, v10.19.0 | Die Option insecureHTTPParser wird jetzt unterstützt. |
v10.9.0 | Der Parameter url kann jetzt zusammen mit einem separaten options -Objekt übergeben werden. |
v7.5.0 | Der Parameter options kann ein WHATWG URL -Objekt sein. |
v0.3.6 | Hinzugefügt in: v0.3.6 |
options
<Object>agent
<http.Agent> | <boolean> Steuert das Verhalten vonAgent
. Mögliche Werte:undefined
(Standard): Verwendung vonhttp.globalAgent
für diesen Host und Port.Agent
-Objekt: explizite Verwendung des übergebenenAgent
.false
: führt dazu, dass ein neuerAgent
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 Optionagent
nicht verwendet wird. Dies kann verwendet werden, um die Erstellung einer benutzerdefiniertenAgent
-Klasse zu vermeiden, nur um die StandardfunktioncreateConnection
zu überschreiben. Weitere Informationen finden Sie unteragent.createConnection()
. JederDuplex
-Stream ist ein gültiger Rückgabewert.defaultPort
<number> Standardport für das Protokoll. Standard:agent.defaultPort
, wenn einAgent
verwendet wird, andernfallsundefined
.family
<number> IP-Adressfamilie, die bei der Auflösung vonhost
oderhostname
verwendet werden soll. Gültige Werte sind4
oder6
. Wenn nicht angegeben, werden sowohl IP v4 als auch v6 verwendet.headers
<Object> Ein Objekt, das Anforderungsheader enthält.hints
<number> Optionaledns.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ürhost
. Umurl.parse()
zu unterstützen, wirdhostname
verwendet, wenn sowohlhost
als auchhostname
angegeben sind.insecureHTTPParser
<boolean> Wenn auftrue
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 untermessage.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, andernfalls80
.protocol
<string> Zu verwendendes Protokoll. Standard:'http:'
.setDefaultHeaders
<boolean>: Gibt an, ob Standardheader wieConnection
,Content-Length
,Transfer-Encoding
undHost
automatisch hinzugefügt werden sollen. Wenn auffalse
gesetzt, müssen alle notwendigen Header manuell hinzugefügt werden. Standardmäßigtrue
.setHost
<boolean>: Gibt an, ob derHost
-Header automatisch hinzugefügt werden soll. Wenn angegeben, überschreibt diessetDefaultHeaders
. Standardmäßigtrue
.signal
<AbortSignal>: Ein AbortSignal, das verwendet werden kann, um eine laufende Anfrage abzubrechen.socketPath
<string> Unix-Domain-Socket. Kann nicht verwendet werden, wenn einer vonhost
oderport
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.
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()
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
:
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 demres
-Objekt ('data'
wird überhaupt nicht emittiert, wenn der Antwortkörper leer ist, z. B. bei den meisten Weiterleitungen)'end'
auf demres
-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 demres
-Objekt
(Verbindung hier geschlossen)
'aborted'
auf demres
-Objekt'close'
'error'
auf demres
-Objekt mit einem Fehler mit der Meldung'Error: aborted'
und dem Code'ECONNRESET'
'close'
auf demres
-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 demreq.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 demreq.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 demres
-Objekt
(
req.destroy()
hier aufgerufen)'aborted'
auf demres
-Objekt'close'
'error'
auf demres
-Objekt mit einem Fehler mit der Meldung'Error: aborted'
und dem Code'ECONNRESET'
oder dem Fehler, mit demreq.destroy()
aufgerufen wurde'close'
auf demres
-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 demres
-Objekt
(
req.abort()
hier aufgerufen)'abort'
'aborted'
auf demres
-Objekt'error'
auf demres
-Objekt mit einem Fehler mit der Meldung'Error: aborted'
und dem Code'ECONNRESET'
.'close'
'close'
auf demres
-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.0 | Der Parameter label wurde hinzugefügt. |
v14.3.0 | Hinzugefügt in: v14.3.0 |
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:
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 [""]'
}
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:
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"]'
}
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
max
<number> Standardwert:1000
.
Legt die maximale Anzahl inaktiver HTTP-Parser fest.
WebSocket
Hinzugefügt in: v22.5.0
Eine browserkompatible Implementierung von WebSocket
.