http模块
在网络节点中,负责消费资源的电脑叫做 客户端;负责对外提供网络资源的电脑,叫做服务器
http模块是用来创建web服务器的模块,通过http模块提供的http.createServer()方法,就能把一台电脑变成一个web服务器,对外提供web资源
区别于普通电脑,一台web服务器,是具备了web服务器软件,例如:IIS、Apache等
服务器相关地址:
- IP地址:
- 每台计算机的唯一地址;格式为
点分十进制(a。b。c。d),分别是0~255之间的十进制数整数;- 互联网中每台web服务器都有自己的ip地址
- 开发过程中,自己的电脑为服务器客户端,127.0.0.1表示本机电脑
- 域名和域名服务器:
- 域名服务器(DNS)用来存放域名和IP的对应关系,将域名和IP进行转换的服务器
- localhost === 127.0.0.1
- 端口号:
- 开启多个web服务的窗口,类似于门牌号
- 客户端发来的请求通过端口号准确交给对应的web服务处理
- 一个端口号只能占用一个web服务
- 实际运用中URL中的
80端口是可以省略
- 创建Web服务器:
- 导入http模块
- 创建http服务器实例
- 为服务器实例绑定request事件,监听客户端的请求;
Rxp.on('request', (req, res) => {});req为客户端相关的数据或属性 - 启动服务器;
Rxp.listen(端口号, () => {}) - 客户端访问服务器相关数据或属性需要
res.end()向客户端响应一些内容
//导入
const Http = require('http');
//创建实例
const server = Http.createServer();
//绑定request事件
server.on('request', (req, res) => {
//req请求信息;res响应信息
console.log('Someone is visiting web');
})
//启动服务器
server.listen(80, () => {
console.log('Server is running on http://127.0.0.1');
})
- 响应中文乱码:
res.setHeader()设置响应报文内容类型
const Http = require('http');
const server = Http.createServer();
server.on('request', (req, res) => {
const sRespond = '乱码';
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.end(sRespond)
})
server.listen(80, () => {
console.log('on http://127.0.0.1');
})
- 根据不同url响应不同的html内容:
1. 获取请求的url地址
2. 设置默认的响应内容为404 Not Found
3. 判断用户请求的是否为/或/index.html 首页
4. 判断用户请求的是否为/about.html 关于
5. 设置Content-Type响应头,防止乱码
6. res.end把内容响应给客户端
const Path = require('path');
const Http = require('http');
const server = Http.createServer();
server.on('request', (req, res) => {
const { url: sUrl, method: sMethod } = req;
const sSplitUrl = sMethod == 'POST' ? sUrl.split('/')[1] : sUrl.split('/')[1].split('?')[0];
const sText = '404 Not Found';
let havePage = true;
let sJumpUrl = '/';
switch (sSplitUrl) {
case '':
case 'index.html':
sJumpUrl = Path.join(__dirname, './clock/index.html');
break;
case 'index.html':
sJumpUrl = Path.join(__dirname, './clock/index.html');
break;
case 'about.html':
havePage = false;
break;
default:
havePage = false;
break;
}
//特别注意此处获取的类型-text/html
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.end(havePage ? sJumpUrl : sText)
});
server.listen(80, () => {
console.log('is on http://127.0.0.1');
})
- 案例-跳转到对应服务器数据
const Path = require('path');
const Fs = require('fs');
const Http = require('http');
const server = Http.createServer();
server.on('request', (req, res) => {
const { url: sUrl, method: sMethod = 'GET' } = req;
let sFinalPath = sUrl === '/' ? '/index.html' : sUrl;
const sLocalPath = Path.join(__dirname, '/clock',sFinalPath);
const sText = '<h1>404 Not Found</h1>';
Fs.readFile(sLocalPath, 'utf8', (err, data) => {
if (err) return res.end(sText);
/** S 设置响应头文件类型 */
let sHeader = 'text/html; charset=utf-8';
switch (Path.extname(sLocalPath)) {
case '.js':
sHeader = 'application/javascript; charset=utf-8';
break;
case '.css':
sHeader = 'text/css';
break;
case '.html':
default:
break;
}
res.setHeader('Content-Type', sHeader);
/** E 设置响应头文件类型 */
res.end(data)
})
});
server.listen(80, () => {
console.log('is on http://127.0.0.1');
})