创建web服务器
// 引用系统模块 const http = require('http'); // 创建web服务器 const app = http.createServer(); // 当客户端发送请求的时候 app.on('request', (req, res) => { // 响应 res.end('<h1>hi, user</h1>'); }); // 监听3000端口 app.listen(3000); console.log('服务器已启动,监听3000端口,请访问 localhost:3000')
1 HTTP协议的概念
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)请求和应答的标准。
①报文
② 请求报文
1. 请求方式 (Request Method)
①GET 请求数据
②POST 发送数据
2. 请求地址 (Request URL)
app.on('request', (req, res) => { req.headers // 获取请求报文 req.url // 获取请求地址 req.method // 获取请求方法 });
③ 响应报文
1. HTTP状态码
100:指示信息–表示请求已接收,继续处理
200:成功–表示请求已被成功接收、理解、接受
300:重定向–要完成请求必须进行更进一步的操作
404:客户端错误–请求有语法错误或请求无法实现
500:服务器端错误–服务器未能实现合法的请求
2. 内容类型
text/html text/css application/javascript image/jpeg application/json
2.HTTP请求与响应处理
1.请求参数
客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。
2.GET请求参数
①参数被放置在浏览器地址栏中,例如:http://localhost:3000/?name=zhangsan&age=20
参数获取需要借助系统模块url,url模块用来处理url地址 const http = require('http'); // 导入url系统模块 用于处理url地址 const url = require('url'); const app = http.createServer(); app.on('request', (req, res) => { // 将url路径的各个部分解析出来并返回对象 // true 代表将参数解析为对象格式 let {query} = url.parse(req.url, true); console.log(query); }); app.listen(3000);
3.POST请求参数
①参数被放置在请求体中进行传输
②获取POST参数需要使用data事件和end事件
③使用querystring系统模块将参数转换为对象格式
// 导入系统模块querystring 用于将HTTP参数转换为对象格式 const querystring = require('querystring'); app.on('request', (req, res) => { let postData = ''; // 监听参数传输事件 req.on('data', (chunk) => postData += chunk;); // 监听参数传输完毕事件 req.on('end', () => { console.log(querystring.parse(postData)); }); });
4.路由
http://localhost:3000/index
http://localhost:3000/login
路由是指客户端请求地址与服务器端程序代码的对应关系。简单的说,就是请求什么响应什么。
// 当客户端发来请求的时候 app.on('request', (req, res) => { // 获取客户端的请求路径 let { pathname } = url.parse(req.url); if (pathname == '/' || pathname == '/index') { res.end('欢迎来到首页'); } else if (pathname == '/list') { res.end('欢迎来到列表页页'); } else { res.end('抱歉, 您访问的页面出游了'); } });
5 静态资源
服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。
6 动态资源
相同的请求地址不同的响应资源,这种资源就是动态资源。