http模块

http模块建立在net模块之上,无须手动管理socket,无须手动组装消息格式

http.request(url[, options][, callback]);

用于发起一个 HTTP 请求。它可以向指定的 URL 发送请求,并处理服务器的响应。

参数

  1. `url(字符串或 URL 对象):

    • 请求的目标 URL。
    • 示例:"http://example.com"
  2. options(可选,对象):

    • 配置请求的选项,例如:

      • method:请求方法(如 GETPOST),默认为 GET
      • headers:请求头信息(对象)。
      • host:目标主机名。
      • port:目标端口号。
  3. callback(可选,函数):

    • 当接收到响应时调用的回调函数。
    • 回调函数的参数为 http.IncomingMessage 对象,表示服务器的响应。

没有请求内容时候的写法

js 复制代码
const http = require("http");

const request = http.request(
    "https://duyi.ke.qq.com/",
    {
        method: "GET"
    },
    resp => {
        console.log("服务器响应的状态码", resp.statusCode);
    }
);

request.end();
  • 获取服务器响应的状态码:resp.statusCode
  • 获取服务器的响应头:resp.headers

http.createServer([options][, requestListener]);

用于创建一个 HTTP 服务器,用于处理客户端的请求。 以下是关于 http.requesthttp.createServer 方法的详细说明和用法示例,基于你提供的图片信息:


1. http.request(url[, options][, callback])

功能

用于发起一个 HTTP 请求。它可以向指定的 URL 发送请求,并处理服务器的响应。

参数

  1. ​**url**​(字符串或 URL 对象):

    • 请求的目标 URL。
    • 示例:"http://example.com"
  2. ​**options**​(可选,对象):

    • 配置请求的选项,例如:

      • method:请求方法(如 GETPOST),默认为 GET
      • headers:请求头信息(对象)。
      • host:目标主机名。
      • port:目标端口号。
    • 示例:

      css 复制代码
      javascript
      {
          method: "POST",
          headers: {
              "Content-Type": "application/json"
          }
      }
  3. ​**callback**​(可选,函数):

    • 当接收到响应时调用的回调函数。

    • 回调函数的参数为 http.IncomingMessage 对象,表示服务器的响应。

    • 示例:

      ini 复制代码
      javascript
      (res) => {
          let data = "";
          res.on("data", (chunk) => {
              data += chunk;
          });
          res.on("end", () => {
              console.log(data);
          });
      }

返回值

返回一个 http.ClientRequest 对象,用于表示正在进行的请求。

示例

ini 复制代码
javascript
const http = require("http");

const req = http.request("http://example.com", (res) => {
    let data = "";
    res.on("data", (chunk) => {
        data += chunk;
    });
    res.on("end", () => {
        console.log(data);
    });
});

req.end(); // 结束请求

2. http.createServer([options][, requestListener])

用于创建一个 HTTP 服务器,用于处理客户端的请求。

参数

  1. options​(可选,对象):

    • 配置服务器的选项,例如:

      • IncomingMessage:自定义的请求类。
      • ServerResponse:自定义的响应类。
  2. requestListener(可选,函数):

    • 处理客户端请求的回调函数。

    • 回调函数的参数为:

      • reqhttp.IncomingMessage 对象,表示客户端的请求。
      • reshttp.ServerResponse 对象,用于向客户端发送响应。

示例

js 复制代码
const http = require("http");
const url = require("url");

function handleReq(req, res) {
    console.log("有请求来了!");

    const urlObj = url.parse(req.url);
    console.log("请求路径", urlObj);
    console.log("请求方法", req.method);
    console.log("请求头", req.headers);

    let body = "";
    req.on("data", chunk => {
        body += chunk.toString("utf-8");
    });

    req.on("end", () => {
        console.log("请求体", body);
    });
}

const server = http.createServer(handleReq);

server.listen(3000, () => {
    console.log("服务器已启动,正在监听端口 3000");
});
const http = require("http");

const http = require("http");

const server = http.createServer((req, res) => {
    handleReq(req);
    res.setHeader("a", "1");
    res.setHeader("b", "2");
    res.statusCode = 404;
    res.write("你好!");
    res.end();
});

server.listen(9527, () => {
    console.log("服务器已启动,正在监听端口 9527");
});

server.listen(9527);

server.on("listening", () => {
    console.log("server listen 9527");
});

总结

  • 我是客户端
    • 请求:ClientRequest 对象
    • 响应:IncomingMessage 对象
  • 我是服务器
    • 请求:IncomingMessage 对象
    • 响应:ServerResponse 对象
相关推荐
jt君4242626 分钟前
React Native JSI 深入剖析 — 第 5 部分中文技术整理:用 HostObject 把 C++ 类暴露给 JavaScript
前端·react native
胡萝卜术28 分钟前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
fluffyox30 分钟前
Notion 的公式栏里,藏着一台虚拟机——逆向 + 用 600 行 JS 复刻它的编译器与栈式 VM
前端
kyriewen2 小时前
2026 年了,这 6 个 npm 包可以卸载了——浏览器原生 API 已经能替代
前端·javascript·npm
Csvn4 小时前
Monorepo 迁移血泪史:从 Multi-Repo 到 Turborepo,这 3 个坑我帮你踩完了
前端
星栈5 小时前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架
用户987409238875 小时前
用 Remotion + edge-tts 打造中文教学视频全自动流水线
前端
风骏时光牛马5 小时前
Less前端工程化实战:变量混合器与项目样式分层落地
前端
假如让我当三天老蒯5 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
SameX5 小时前
iOS 独立开发实践:用 MapKit + 像素渲染实现 Citywalk 轨迹地图 App「雁过留痕」
前端