内置模块http

一、快速理解超文本传输协议 http


1. 什么是http协议

  • 超⽂本传送协议,是Web联⽹的基础,也是移动或PC联⽹常⽤的协议之⼀,HTTP协议是建⽴在TCP协议之上的⼀种应⽤
  • HTTP连接最显著的特点是客户端发送的每次请求都需要服务器响应请求,从建⽴连接到关闭连接的过程称为“⼀次连接”
  • HTTP请求 ---> HTTP响应

2. http 消息结构(报文)

  • 请求报文

    • 请求行:请求方法、URL地址、协议名
    • 请求头:报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的基本信息
    • 请求体:请求的参数,可以是json对象,也可以是前端表单生成的key=value&key=value的字符串
      在这里插入图片描述
  • 响应头

    • 响应行:报文协议及版本、状态码
    • 响应头:报文头包含若干个属性,格式为“属性名:属性值”
    • 响应正文:响应报文体,我们需要的内容,多种形式比如html、json、图片、视频文件等
      在这里插入图片描述

3. 请求方法

  • GET: 向服务器获取资源,比如常见的查询请求
  • POST: 向服务器提交数据而发送的请求
  • Head: 和get类似,返回的响应中没有具体的内容,用于获取报头

4. 状态码

  • 1XX

    • 100 收到请求,需要请求者继续执行操作,比较少用
    • 101 切换请求的协议
  • 2XX: 请求成功,常用的 200

  • 3XX: 重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取;

    • 好处:网站改版、域名迁移等,多个域名指向同个主站导流
    • 301:永久性跳转,比如域名过期,换个域名
    • 302:临时性跳转
    • 304:数据已经在客户端缓存,不需要请求更多的数据
  • 4XX: 客服端出错,请求包含语法错误或者无法完成请求

    • 400: 请求出错,比如语法协议
    • 403: 没权限访问
    • 404: 找不到这个路径对应的接口或者文件
    • 405: 不允许此方法进行提交,Method not allowed,比如接口一定要POST方式,而你是用了GET
  • 5XX: 服务端出错,服务器在处理请求的过程中发生了错误

    • 500: 服务器内部报错了,完成不了这次请求
    • 503: 服务器宕机

二、Node中http模块相关知识点


  • http模块
    • 是Node.js 网络的关键模块,用来创建web服务器,通过 http.createServer() 就能将普通的电脑变成本地的web服务器
  • ip
    • 在互联网中每个服务器都有一个唯一的ip地址,本地服务器ip地址为:127.0.0.1
    • 在开发环境下,自己的电脑既是客户端也是服务器,浏览器输入http://127.0.0.1:3000就能访问
  • 域名
    • 由于ip地址不直观,不方便记忆,诞生了域名地址来替换ip地址访问
    • iP地址和域名是一对多的关系,对应关系在域名服务器中(DNS)保存
  • 端口
    • 端口就像是银行的办事窗口,每个窗口可以提供不同的服务,银行就是服务器
      在这里插入图片描述

三、创建一个本地的web服务器


//引入http模块
const http = require('http');

//创建服务器
const server = http.createServer();

//监听客户端的请求
server.on('request', (req, res) => {
    
    
  const mess = `请求地址:${
      
      req.url},请求方法:${
      
      req.method}`;
  //解决中文乱码的问题
  res.setHeader('Content-Type', 'text/html;charset=utf-8');
  //响应的内容和结束本次请求
  res.end(mess);
});

//启动服务器
server.listen(3000, () => {
    
    
  console.log('服务运行在:http://127.0.0.1:3000');
});

在这里插入图片描述
在这里插入图片描述

四、根据请求路径不同返回不同的资源内容


const http = require('http');

const server = http.createServer();

server.on('request', (req, res) => {
    
    
  let mess = '<h1>404 页面数据请求失败</h1>';
  if (req.url === '/' || req.url === '/home') {
    
    
    mess = '<h1>首页</h1>';
  } else if (req.url === '/about') {
    
    
    mess = '<h1>关于</h1>';
  }
  res.setHeader('Content-Type', 'text/html;charset=utf-8');
  res.end(mess);
});

server.listen(3000, () => {
    
    
  console.log('server run in http://127.0.0.1:3000');
});

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_58190023/article/details/129749415