一、快速理解超文本传输协议 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服务器
- 是Node.js 网络的关键模块,用来创建web服务器,通过
- ip
- 在互联网中每个服务器都有一个唯一的ip地址,本地服务器ip地址为:
127.0.0.1
- 在开发环境下,自己的电脑既是客户端也是服务器,浏览器输入
http://127.0.0.1:3000
就能访问
- 在互联网中每个服务器都有一个唯一的ip地址,本地服务器ip地址为:
- 域名
- 由于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');
});