write() 第二次被调用时,Node.js 会以流的形式处理数据,并将它们分别发送。 也就是说,响应会被缓冲到响应主体的第一个数据块。
如果全部数据被成功刷新到内核缓冲区,则返回 true。 如果全部或部分数据还在内存中排队,则返回 false。 当缓冲区再次空闲时,则触发 'drain' 事件
【response.writeContinue()】
发送一个 HTTP/1.1 100 Continue 消息到客户端,表示请求主体可以开始发送
【response.writeHead(statusCode[, statusMessage][, headers])】
statusCode <number> 状态码是一个三位数的 HTTP 状态码,如 404
statusMessage <string> statusMessage 是可选的状态描述
headers <Object> headers 是响应头
发送一个响应头给请求
var body = 'hello world';
response.writeHead(200, {
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'text/plain' });
该方法在消息中只能被调用一次,且必须在 response.end() 被调用之前调用。
如果在调用该方法之前调用 response.write() 或 response.end(),则隐式的响应头会被处理并调用该函数。
response.setHeader() 设置的响应头会与 response.writeHead() 设置的响应头合并,且 response.writeHead() 的优先
// 返回 content-type = text/plain
var 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 错误
IncomingMessage
IncomingMessage 对象由 http.Server 或 http.ClientRequest 创建,并作为第一个参数分别递给 'request' 和 'response' 事件。 它可以用来访问响应状态、消息头、以及数据。它实现了 可读流 接口
【aborted事件】
当请求已被客户端终止且网络 socket 已关闭时触发
【close事件】
当底层连接被关闭时触发。 同 end 事件一样,该事件每个响应只触发一次
【message.destroy([error])】
调用接收到 IncomingMessage 的 socket 上的 destroy() 方法。 如果提供了 error,则触发 error 事件,且把 error 作为参数传入事件的监听器
【message.headers】
请求头或响应头的对象
头信息的名称与值的键值对。 头信息的名称为小写
// { 'user-agent': 'curl/7.22.0',
// host: '127.0.0.1:8000',
// accept: '*/*' }
console.log(request.headers);
【message.httpVersion】
在服务器请求中,该属性返回客户端发送的 HTTP 版本。在客户端响应中,该属性返回连接到的服务器的 HTTP 版本。 可能的值有 '1.1' 或 '1.0'
message.httpVersionMajor 返回 HTTP 版本的第一个整数值,message.httpVersionMinor 返回 HTTP 版本的第二个整数值
【message.method】
返回一个字符串,表示请求的方法。 该属性只读。 例如:'GET'、'DELETE'。
[注意]仅在 http.Server 返回的请求中有效。
【message.rawHeaders】
接收到的原始的请求头或响应头列表。
[注意]键和值在同一个列表中。 偶数位的是键,奇数位的是对应的值。
头信息的名称不会被转换为小写,重复的也不会被合并
// [ '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】
接收到的原始的 Trailer 请求头或响应头的的键和值。 只在 'end' 事件时被赋值
【message.setTimeout(msecs, callback)】
msecs <number>
callback <Function>
返回 message
调用 message.connection.setTimeout(msecs, callback)
【message.socket】
返回与连接关联的 net.Socket 对象。
通过 HTTPS 的支持,使用 request.socket.getPeerCertificate() 获取客户端的认证信息
【message.statusCode】
返回一个三位数的 HTTP 响应状态码。 如 404
[注意]仅在 http.ClientRequest 返回的响应中有效。
【message.statusMessage】
仅在 http.ClientRequest 返回的响应中有效。
返回 HTTP 响应状态消息(原因描述)。 如 OK 或 Internal Server Error
【message.trailers】
返回 Trailer 请求头或响应头对象。 只在 'end' 事件时被赋值
【message.url】
返回请求的 URL 字符串。 仅包含实际 HTTP 请求中的 URL
[注意]仅在 http.Server 返回的请求中有效
HTTP
【http.METHODS】
返回解析器支持的 HTTP 方法的列表
【http.STATUS_CODES】