IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Node.js网络通信方式:Http协议 -> 正文阅读

[网络协议]Node.js网络通信方式:Http协议

上篇介绍了UDP协议通信,本篇介绍Http协议:一种通用、无状态的应用层协议。

服务端代码如下:

/**
 * Http 服务端
 */
const http = require("http");
const url = require("url");

const querystring = require('querystring');

//服务器创建
const server = http.createServer((req,res)=>{
    let reqUrl = decodeURI(req.url);
    reqUrl = url.parse(reqUrl);
    console.log("web 客户端url="+req.url);

    let data = "";
    req.on("data",(chunk)=>{
        data += chunk;
    });
    req.on("end",()=>{
        data = decodeURI(data);
        let dataObj = querystring.parse(data);
        console.log("web 客户端数据:",dataObj);

        res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
        res.write("Hello!");
        res.end("响应完毕\n");
    });

   
});

server.listen(8080,()=>{
    console.log("服务器已经启动!");
});

server.on("error",(err)=>{
    console.error("服务器错误:",err.message);
});

//服务器关闭
// server.close();

客户端代码如下:

/**
 * Http请求客户端
 */
const http = require("http");

//--------Post请求【键值对形式表单】-------------------
const querystring = require("querystring");
//将要提交的数据转换为查询字符串
const postData = querystring.stringify({"msg":"你好!我是Http客户端"});
//发送请求设置
const options = {
    hostname:"127.0.0.1",
    port:8080,
    path:"/upload",
    method:"POST",
    headers:{
        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
        'Content-Length': Buffer.byteLength(postData)
    }
}

//创建Post请求
const req = http.request(options,(res)=>{
   console.log("服务器返回状态码:",res.statusCode);
   console.log("服务器返回响应头:",JSON.stringify(res.headers));
   let data ="";
   res.setEncoding("utf8");
   res.on("data",(chunk)=>{
       data += chunk;
   });
   res.on("end",()=>{
       console.log("服务器返回响应体数据:"+data);
   }); 
});

req.on("error",(err)=>{
   console.error("客户端错误:",err.message);
   if(err)
   {
       req.destroy();//终止当前请求
   }
});

req.on("abort",()=>{
    console.log("客户端终止请求!");
});

req.on("timeout",()=>{
    console.log("客户端请求超时!"); 
});

req.setTimeout(3000);
//post请求携带的参数是类似键值对对象组
req.write(postData);
req.end();


//----------------Get请求【以?分割URL和传输数据,参数之间以&相连】----------
const options2 = {
    hostname: '127.0.0.1',
    port: 8080,
    path: encodeURI('/index.html?page=12&stats=打开')   
};

const req2 = http.get(options2,(res)=>{
    let data = "";
    res.on("data",(chunk)=>{
       data += chunk; 
    });
    res.on("end",()=>{
        console.log("服务器返回响应体数据:",data);
    });     
});

req2.on("error",(err)=>{
    console.log("出现错误:",err.message);
});

运行结果如下

【服务端】

【客户端】

?

Node.js内置了http模块,因此无需安装第3方的包。http常用请求方式:get与post,它们的主要区别在于携带请求参数的不同,前者是拼接在url后,后者是以表单键值对象方式。?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:52:13  更:2021-12-24 18:52:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 7:55:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码