http模块

http 模块是一个内置模块,它提供了 HTTP 服务器的功能。使用这个模块,你可以创建一个 HTTP 服务器来响应客户端的请求,http 模块是 Node.js 中进行 HTTP 通信的基础,无论是作为服务器还是客户端。

常用的服务器软件还有:Apache,IIS,Nginx,Tomcat

http 模块的一些基本用法

  1. 创建服务器 (http.createServer):
    • http.createServer((request, response)):创建一个新的 HTTP 服务器,其中 request 是一个包含请求信息的对象,response 是一个可以用于发送响应的对象。
  2. 监听请求
    • 服务器对象有一个 listen 方法,用于指定服务器监听的端口和(可选的)主机名。
  3. 发送响应
    • 使用 response 对象的 writeHead 方法设置响应状态码和响应头。
    • 使用 response 对象的 end 方法发送响应体并结束响应。
  4. 处理客户端请求
    • 你可以访问 request 对象来获取请求方法、URL、HTTP 版本、请求头等信息。
    • 可以通过 request 对象的 on 方法监听数据事件,以接收请求体。
  5. 关闭服务器
    • 使用 server.close 方法关闭服务器,停止监听端口。
  6. 发送文件作为响应
    • 可以使用 fs 模块读取文件内容,并通过 response 对象发送。
  7. 错误处理
    • 可以监听 server 对象的 error 事件来处理错误。

创建 web 服务器的基本步骤

  1. 导入 http 模块
  2. 创建 web 服务器实例
  3. server.on() 为服务器实例绑定 request事件,监听客户端的请求
  4. 启动服务器

下面是一个简单实例:

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')
    }
)

服务器端方法

  1. http.createServer()
    • 创建一个新的 HTTP 服务器实例。
  2. server.listen(port, [hostname], [backlog], [callback])
    • 使服务器监听指定的端口和主机名。
  3. server.close([callback])
    • 关闭服务器,停止监听。
  4. server.emit('request', request, response)
    • 当客户端发送请求时,触发 'request' 事件。
  5. server.emit('upgrade', request, socket, head)
    • 当客户端请求升级连接到一个 Websocket 时,触发 'upgrade' 事件。
  6. server.emit('connect', request, socket)
    • 当客户端请求一个 HTTP CONNECT 方法时,触发 'connect' 事件。
  7. server.maxHeadersCount
    • 设置可以接收的请求头的最大数量。
  8. server.setTimeout(msecs, callback)
    • 设置响应超时时间。
  9. server.keepAliveTimeout
    • 设置长连接的超时时间。

请求和响应对象方法

  1. response.writeHead(statusCode,[ statusMessage],[ headers])
    • 发送响应头。
  2. response.write(chunk, [encoding])
    • 发送响应体的一部分。
    • encoding 默认值为 utf-8
  3. response.end([data],[enconding])
    • 结束响应过程。
  4. response.setTimeout(msecs, callback)
    • 设置请求的超时时间。
  5. response.getHeader(name)
    • 获取响应头。
  6. response.setHeader(name, value)
    • 设置响应头。
  7. response.hasHeader(name)
    • 检查是否设置了特定的响应头。
  8. response.removeHeader(name)
    • 移除特定的响应头。

客户端请求方法

  1. http.request(options, callback)
    • 发起一个请求到服务器。
  2. http.get(options, callback)
    • 发送一个 GET 请求。

请求选项(options)属性:

  • hostnamehost:请求的服务器域名或 IP 地址。
  • port:服务器端口。
  • path:请求的路径。
  • method:请求方法(如 GET 或 POST)。
  • headers:请求头对象。
  • auth:HTTP 基本认证(用户名和密码)。
  • 等等...

请求对象方法

  1. request.write(chunk,[encoding])
    • 向请求体写入数据。
  2. request.end([data],[enconding])
    • 结束请求。
  3. request.abort()
    • 中止请求。
  4. request.setTimeout(timeout, [callback])
    • 设置请求超时。
  5. request.on('response', callback)
    • 当接收到响应时触发。

事件

  • request:服务器接收到请求时触发。
  • upgrade:客户端请求升级连接时触发。
  • connect:客户端请求 HTTP CONNECT 方法时触发。
  • checkContinue:客户端发送了 HTTP 'Expect: 100-continue' 头时触发。
  • error:请求或响应过程中发生错误时触发。
  • timeout:请求超时时触发。
posted on 2024-08-20 10:57  XiSoil  阅读(71)  评论(0编辑  收藏  举报