NodejsHTTP协议-请求与响应处理 (适合初学者)

时间:2021-1-8 作者:admin

创建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文件。

www.itcast.cn/images/logo…

6 动态资源

相同的请求地址不同的响应资源,这种资源就是动态资源。

www.itcast.cn/article?id=…

www.itcast.cn/article?id=…

7 客户端请求途径

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。