Skip to content

HTTP

TIP

要使用 HTTP 服务器和客户端,必须 require('node:http')

request

js
request.flushHeaders() // 刷新请求标头
request.getHeader('Content-Type') // 读出请求的标头。该名称不区分大小写。返回值的类型取决于提供给 request.setHeader() 的参数。
request.getHeaderNames() // 返回一个数组,其中包含当前传出标头的唯一名称。 所有标头名称均为小写, ['foo', 'cookie']
request.getRawHeaderNames() // 返回一个数组,其中包含当前传出原始数据的唯一名称 头。返回标头名称,并设置其确切大小写, ['Foo', 'Set-Cookie'] 
request.hasHeader('content-type') // 如果当前在传出标头中设置了标识的 name 标头,则返回 true 。标头名称匹配不区分大小写。
request.maxHeadersCount // 限制最大响应标头计数。如果设置为 0,则不会应用任何限制。
request.path // 请求路径
request.method // 请求方法
request.host // 请求主机
request.protocol // 请求协议
request.removeHeader(name) // 删除已定义到 headers 对象中的标头 
request.setHeader(name, value) // 设置 headers 对象的单个标头值。如果此标头已存在于待发送标头中,则其值将被替换

response

js
// 此方法向服务器发出信号,表明所有响应标头和正文都已发送;该服务器应将此消息视为完整。必须在每个响应时调用方法 response.end() 
// 如果 data 指定,则其效果类似于后跟 response.end(callback) 的调用 response.write(data, encoding) 
// 如果 callback 指定,则将在响应流完成时调用它
response.end([data[, encoding]][, callback])
response.statusCode // 此属性控制在刷新标头时将发送到客户端的状态代码
response.statusMessage // 此属性控制在刷新标头时将发送到客户端的状态消息

http

方法描述
http.METHODS分析器支持的 HTTP 方法的列表
http.STATUS_CODES所有标准 HTTP 响应状态代码的集合,以及每个代码的简短说明
http.validateHeaderName验证给定的标头名称是否有效
http.validateHeaderValue验证给定的标头值是否有效
http.setMaxIdleHTTPParsers(max)设置最大空闲 HTTP 解析器的数量

createServer

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

js
const http  = require('node:http')
// 以下二种办法都可以实现网络请求
// http.createServer((req, res) => {
//   res.writeHead(200, { 'Content-Type': 'application/json' })
//   res.end(JSON.stringify({
//     data: 'hello'
//   }))
// }).listen(3007)


// `requestListener` 自动添加到 `request` 事件中的函数
const server = http.createServer()
server.on('request', (request, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    data: 'Hello World!',
  }))
}).listen(3007)

get

http.get(options[, callback]) 或者 http.get(url[, options][, callback])

调用 API 发送请求, 只能发送 get 请求

js
const http  = require('node:http')

http.get('http://localhost:3007/', (res) => {
  const { statusCode } = res;
  const contentType = res.headers['content-type'];

  let error;
  // Any 2xx status code signals a successful response but
  // here we're only checking for 200.
  if (statusCode !== 200) {
    error = new Error('Request Failed.\n' +
                      `Status Code: ${statusCode}`);
  } else if (!/^application\/json/.test(contentType)) {
    error = new Error('Invalid content-type.\n' +
                      `Expected application/json but received ${contentType}`);
  }
  if (error) {
    console.error(error.message);
    // Consume response data to free up memory
    res.resume();
    return;
  }

  res.setEncoding('utf8');
  let rawData = '';
  res.on('data', (chunk) => { rawData += chunk; });
  res.on('end', () => {
    try {
      const parsedData = JSON.parse(rawData);
      console.log(parsedData);
      // 输出结果:{ data: 'Hello World!' }
    } catch (e) {
      console.error(e.message);
    }
  });
}).on('error', (e) => {
  console.error(`Got error: ${e.message}`);
});


// `requestListener` 自动添加到 `request` 事件中的函数
const server = http.createServer()
server.on('request', (request, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    data: 'Hello World!',
  }))
}).listen(3007)

request

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

调用 API 发送请求,可自定义请求方法类型

js
const http  = require('node:http')

const postData = JSON.stringify({
  'msg': 'Hello World!',
});

const options = {
  method: 'get',
  path: '/',
  port: 3007,
  hostname: 'localhost',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(postData),
  },
}

const req = http.request(options, (res) => {
  console.log(`状态: ${res.statusCode}`);
  console.log(`header: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`数据: ${chunk}`);
  });
  res.on('end', () => {
    console.log('没有更多数据了');
  });
});

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

// Write data to request body
req.write(postData);
req.end();

http.createServer((req, res) => {
  res.end('Hello World!');
}).listen(3007)

Released under the MIT License.