response.writeHead(statusCode[, statusMessage][, headers])
statusCode
<number>statusMessage
<string>headers
<Object>- 返回: <http.ServerResponse>
向请求发送响应头。
状态码是 3 位的 HTTP 状态码,如 404
。
最后一个参数 headers
是响应头。
可选地给定人类可读的 statusMessage
作为第二个参数。
返回对 ServerResponse
的引用,以便可以链式调用。
const body = 'hello world';
response
.writeHead(200, {
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'text/plain'
})
.end(body);
此方法只能在消息上调用一次,并且必须在调用 response.end()
之前调用。
如果在调用此之前调用了 response.write()
或 response.end()
,则将计算隐式/可变的标头并调用此函数。
当标头已使用 response.setHeader()
设置时,则它们将与任何传给 response.writeHead()
的标头合并,其中传给 response.writeHead()
的标头优先。
如果调用了此方法,且还没调用 response.setHeader()
,则会直接将提供的标头值写入网络通道且内部不缓存,在标头上 response.getHeader()
不会产生预期的结果。
如果需要逐步填充标头并在未来进行潜在的检索和修改,则改用 response.setHeader()
。
// 返回 content-type = text/plain
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
以字节为单位,而不是字符。
使用 Buffer.byteLength()
来确定正文的长度(以字节为单位)。
Node.js 不会检查 Content-Length
和已经传输的正文的长度是否相等。
尝试设置包含无效字符的标头字段名称或值将导致抛出 TypeError
。
statusCode
<number>statusMessage
<string>headers
<Object>- Returns: <http.ServerResponse>
Sends a response header to the request. The status code is a 3-digit HTTP
status code, like 404
. The last argument, headers
, are the response headers.
Optionally one can give a human-readable statusMessage
as the second
argument.
Returns a reference to the ServerResponse
, so that calls can be chained.
const body = 'hello world';
response
.writeHead(200, {
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'text/plain'
})
.end(body);
This method must only be called once on a message and it must
be called before response.end()
is called.
If response.write()
or response.end()
are called before calling
this, the implicit/mutable headers will be calculated and call this function.
When headers have been set with response.setHeader()
, they will be merged
with any headers passed to response.writeHead()
, with the headers passed
to response.writeHead()
given precedence.
If this method is called and response.setHeader()
has not been called,
it will directly write the supplied header values onto the network channel
without caching internally, and the response.getHeader()
on the header
will not yield the expected result. If progressive population of headers is
desired with potential future retrieval and modification, use
response.setHeader()
instead.
// Returns content-type = text/plain
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
is given in bytes, not characters. Use
Buffer.byteLength()
to determine the length of the body in bytes. Node.js
does not check whether Content-Length
and the length of the body which has
been transmitted are equal or not.
Attempting to set a header field name or value that contains invalid characters
will result in a TypeError
being thrown.