14.http模块 - request(请求) 和 response(响应)
-- 未经授权禁止转载 --
import http from 'http'

//本地回环地址是一个特殊的ip地址(通常为 127.0.0.1), 主要用于同一台主机的通信和测试
const hostname = '127.0.0.1' // 服务器监听的ip地址(本地回环地址), 意味着服务器只接受来自本机的网络请求
const port = 8008 //服务器监听的端口号

//http.createServer 创建一个 http 服务器实例
const server = http.createServer((request, response) => {
  // ------ request
  //request.method: http 请求的方法
  //request.url: 请求的 url
  console.log(`${request.method} ${request.url}`)

  //console.log(request.headers) //http 请求的头部信息
  console.log("referer:", request.headers.referer)
  console.log("user-agent:", request.headers['user-agent'])
  console.log("\n") //换行

  // ------ response
  response.statusCode = 200 //200 状态码表示请求成功
  response.setHeader('Content-Type', 'text/html; charset=UTF-8') //设置内容类型为 'text/html; charset=UTF-8' 的响应头

  //response.end("<h3>dengruicode.com</h3>") //发送响应数据并结束响应
  response.write("<h3>dengruicode.com</h3>")
  response.end()
})

//启动 http 服务器,并在指定的ip地址(127.0.0.1)和端口(8008)上监听连接请求
server.listen(port, hostname, () => {
  console.log(`服务器已启动: http://${hostname}:${port}`)
})


说明
{
  host: '127.0.0.1:8008',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'sec-ch-ua': '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"Windows"',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  'sec-fetch-site': 'none',
  'sec-fetch-mode': 'navigate',
  'sec-fetch-user': '?1',
  'sec-fetch-dest': 'document',
  'accept-encoding': 'gzip, deflate, br, zstd',
  'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6'
}


host: '127.0.0.1:8008'
  请求的目标服务器地址和端口号
connection: 'keep-alive'
  使用持久连接, 即在一个TCP连接上可以发送多个HTTP请求
'cache-control': 'max-age=0'
  最大缓存时间为0, 表示不使用缓存, 每次请求都需要从服务器获取最新的数据
'sec-ch-ua': '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"'
  浏览器的用户代理字符串, 用于告诉服务器客户端使用的浏览器类型和版本信息
'sec-ch-ua-mobile': '?0'
  是否为移动设备, 0表示非移动设备
'sec-ch-ua-platform': '"Windows"'
  运行浏览器的平台
'upgrade-insecure-requests': '1'
  客户端希望升级到更安全的协议, 如HTTPS
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
  客户端的用户代理字符串, 描述了浏览器和操作系统等信息
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'
  可接受的内容类型, 包括文本/html、xml、图像等
'sec-fetch-site': 'none'
  请求的来源站点, none表示没有来源站点
'sec-fetch-mode': 'navigate'
  请求的模式, navigate表示页面导航请求
'sec-fetch-user': '?1'
  请求是否涉及用户行为, ?1表示可能涉及用户行为
'sec-fetch-dest': 'document'
  请求的目标, document表示请求的目标是文档
'accept-encoding': 'gzip, deflate, br, zstd'
  客户端可以接受的压缩编码格式
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6'
  客户端接受的语言及其优先级

注
referer: 'http://127.0.0.1:8008/'
  发送请求的页面地址, 服务器通常用来获取请求来源的信息