http模块
http
模块是一个内置模块,它提供了 HTTP 服务器的功能。使用这个模块,你可以创建一个 HTTP 服务器来响应客户端的请求,http
模块是 Node.js 中进行 HTTP 通信的基础,无论是作为服务器还是客户端。
常用的服务器软件还有:Apache,IIS,Nginx,Tomcat
http
模块的一些基本用法
- 创建服务器 (
http.createServer
):http.createServer((request, response))
:创建一个新的 HTTP 服务器,其中request
是一个包含请求信息的对象,response
是一个可以用于发送响应的对象。
- 监听请求:
- 服务器对象有一个
listen
方法,用于指定服务器监听的端口和(可选的)主机名。
- 服务器对象有一个
- 发送响应:
- 使用
response
对象的writeHead
方法设置响应状态码和响应头。 - 使用
response
对象的end
方法发送响应体并结束响应。
- 使用
- 处理客户端请求:
- 你可以访问
request
对象来获取请求方法、URL、HTTP 版本、请求头等信息。 - 可以通过
request
对象的on
方法监听数据事件,以接收请求体。
- 你可以访问
- 关闭服务器:
- 使用
server.close
方法关闭服务器,停止监听端口。
- 使用
- 发送文件作为响应:
- 可以使用
fs
模块读取文件内容,并通过response
对象发送。
- 可以使用
- 错误处理:
- 可以监听
server
对象的error
事件来处理错误。
- 可以监听
创建 web 服务器的基本步骤
- 导入 http 模块
- 创建 web 服务器实例
server.on()
为服务器实例绑定 request事件,监听客户端的请求- 启动服务器
下面是一个简单实例:
const http = require('http')
// 创建 web 服务器实例
const server = http.createServer()
server.on('request', (request, response) => {
// 获取发送请求的url
const url = request.url
console.log(`Request request: ${url}`)
// 获取发送请求的类型
const method = request.method || 'GET'
// 设置响应头
response.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-8'
});
// 发送响应数据
response.end("hello world!", 'utf-8')
})
server.listen(8081, '127.0.0.1', function () {
console.log('server running in 127.0.0.1:8081')
}
)
服务器端方法:
- http.createServer():
- 创建一个新的 HTTP 服务器实例。
- server.listen(port, [hostname], [backlog], [callback]):
- 使服务器监听指定的端口和主机名。
- server.close([callback]):
- 关闭服务器,停止监听。
- server.emit('request', request, response):
- 当客户端发送请求时,触发 'request' 事件。
- server.emit('upgrade', request, socket, head):
- 当客户端请求升级连接到一个 Websocket 时,触发 'upgrade' 事件。
- server.emit('connect', request, socket):
- 当客户端请求一个 HTTP CONNECT 方法时,触发 'connect' 事件。
- server.maxHeadersCount:
- 设置可以接收的请求头的最大数量。
- server.setTimeout(msecs, callback):
- 设置响应超时时间。
- server.keepAliveTimeout:
- 设置长连接的超时时间。
请求和响应对象方法:
- response.writeHead(statusCode,[ statusMessage],[ headers]):
- 发送响应头。
- response.write(chunk, [encoding]):
- 发送响应体的一部分。
encoding
默认值为utf-8
- response.end([data],[enconding]):
- 结束响应过程。
- response.setTimeout(msecs, callback):
- 设置请求的超时时间。
- response.getHeader(name):
- 获取响应头。
- response.setHeader(name, value):
- 设置响应头。
- response.hasHeader(name):
- 检查是否设置了特定的响应头。
- response.removeHeader(name):
- 移除特定的响应头。
客户端请求方法:
- http.request(options, callback):
- 发起一个请求到服务器。
- http.get(options, callback):
- 发送一个 GET 请求。
请求选项(options)属性:
hostname
或host
:请求的服务器域名或 IP 地址。port
:服务器端口。path
:请求的路径。method
:请求方法(如 GET 或 POST)。headers
:请求头对象。auth
:HTTP 基本认证(用户名和密码)。- 等等...
请求对象方法:
- request.write(chunk,[encoding]):
- 向请求体写入数据。
- request.end([data],[enconding]):
- 结束请求。
- request.abort():
- 中止请求。
- request.setTimeout(timeout, [callback]):
- 设置请求超时。
- request.on('response', callback):
- 当接收到响应时触发。
事件:
request
:服务器接收到请求时触发。upgrade
:客户端请求升级连接时触发。connect
:客户端请求 HTTP CONNECT 方法时触发。checkContinue
:客户端发送了 HTTP 'Expect: 100-continue' 头时触发。error
:请求或响应过程中发生错误时触发。timeout
:请求超时时触发。