常用属性
statusCode
: 设置或获取HTTP状态码。例如,200
表示成功,404
表示未找到。statusMessage
: 设置或获取与状态码相对应的状态消息。这通常不需要手动设置,因为Node.js会根据statusCode
自动设置它。headersSent
: 一个布尔值,表示响应头是否已经被发送。sendDate
: 一个布尔值,表示是否在响应头中包含日期和时间。默认值为true
。header
: 一个对象,包含将要发送到客户端的响应头。注意,这里的头名称是首字母大写的,与IncomingMessage
的headers
属性不同。
常用方法
writeHead(statusCode[, statusMessage][, headers])
: 发送响应头到客户端。statusCode
是HTTP状态码,statusMessage
是可选的状态消息,headers
是一个包含响应头的对象。这个方法必须在end
方法之前调用,且只能调用一次。write(chunk[, encoding][, callback])
: 向响应体中写入数据。chunk
可以是一个字符串或一个Buffer对象。encoding
是可选的,用于指定字符串的编码。callback
是可选的,当数据被刷新到客户端时调用。end([data][, encoding][, callback])
: 结束响应,并可选地向响应体中写入最后的数据。如果data
被指定,它相当于先调用write
再调用end
。encoding
和callback
与write
方法相同。setHeader(name, value)
: 设置单个响应头的值。如果头已经存在,则替换它的值。removeHeader(name)
: 移除一个已经设置的响应头。addHeader(name, value)
: 向响应头中添加一个值,而不替换现有的值(如果头已经存在)。这对于设置多个相同名称的头(如Set-Cookie
)很有用。
示例
以下是一个简单的HTTP服务器示例,它使用http.ServerResponse
来发送响应:
const http = require('http');const server = http.createServer((req, res) => {// 设置响应头res.writeHead(200, { 'Content-Type': 'text/plain' });// 向响应体中写入数据res.write('Hello, ');res.write('world!\n');// 结束响应res.end();
});server.listen(3000, '127.0.0.1', () => {console.log('Server running at http://127.0.0.1:3000/');
});
在这个例子中,服务器监听在127.0.0.1:3000
上,当接收到请求时,它设置响应头为200 OK
和Content-Type: text/plain
,然后向响应体中写入"Hello, world!\n",最后结束响应。
注意事项
- 响应头必须在响应体之前发送,即你必须在调用
write
或end
之前调用writeHead
。 - 一旦响应头被发送(无论是通过
writeHead
还是隐式地通过第一次调用write
或end
),你就不能再修改它们。 - 如果你没有显式调用
writeHead
,Node.js会在你第一次调用write
或end
时自动为你设置一个默认的响应头。 - 响应结束后,不能再向它写入数据。如果你尝试这样做,将会触发一个错误。
了解并熟练使用http.ServerResponse
的属性和方法对于构建有效的Node.js HTTP服务器至关重要。