response.writeHead(statusCode[, statusMessage][, headers])
statusCode
<number>statusMessage
<string>headers
<Object> | <Array>- 返回: <http.ServerResponse>
向请求发送响应头。
状态码是 3 位的 HTTP 状态码,如 404
。
最后一个参数 headers
是响应头。
可选地给定人类可读的 statusMessage
作为第二个参数。
headers
可以是 Array
,其中键和值在同一个列表中。
它不是元组列表。
因此,偶数偏移是键值,奇数偏移是关联的值。
该数组的格式与 request.rawHeaders
相同。
返回对 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
和已经传输的 body 的长度是否相等。
尝试设置包含无效字符的标头字段名称或值将导致抛出 [Error
][]。
statusCode
<number>statusMessage
<string>headers
<Object> | <Array>- 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.
headers
may be an Array
where the keys and values are in the same list.
It is not a list of tuples. So, the even-numbered offsets are key values,
and the odd-numbered offsets are the associated values. The array is in the same
format as request.rawHeaders
.
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 read in bytes, not characters. Use
Buffer.byteLength()
to determine the length of the body in bytes. Node.js
will 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 [Error
][] being thrown.