前端需要去了解的nodejs知识(http)

简介: http超文本传输协议,稍微有点网络知识的人都晓得这个名词,那nodejs中的http和他有什么关系呢?Nodejs中的http是实现网络传输的基础模块,

http超文本传输协议,稍微有点网络知识的人都晓得这个名词,那nodejs中的http和他有什么关系呢?Nodejs中的http是实现网络传输的基础模块,

HTTP协议


HTTP(超文本传输协议),是应用层中的数据传输协议,是万维网数据通信的基础。HTTP的协议在应用层的主要特征如下:

  • HTTP协议中必须同时具备客户端和服务端。
  • 基于 TCP/IP 通信协议来传递数据。
  • HTTP是无连接(区别于socket),无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
  • HTTP 是无状态(需要引入缓存的原因),HTTP对于事务处理是没有记忆能力的,后续的请求是无法获取前面请求的任何信息的。
  • HTTP 是媒体独立的(对于传输的数据是无限制的),只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。

Nodejs http模块


网上搜索到一张很形象的图,描述了http和TCP/IP之间的关系,由图可看出HTTP和TCP/IP的整体作用是保证数据在客户端(发起请求方)和服务端(接受请求方)的传输。两者间的区别:

  • TCP/IP传输的报文是字节(二进制数据),HTTP传输的是超文本数据(字符)
  • TCP是作用于传输层的,HTTP是作用于应用层的,HTTP请求时通过 TCP 协议建立起连接服务器的通道
  • HTTP 是无状态的短连接,而 TCP 是有状态的长连接
  • TCP定义的是数据传输和连接方式的规范,HTTP是应用层协议,定义的是传输数据的内容的规范

注:这里为何要了解下TCP呢,因为HTTP协议是建立在TCP基础上的,如果对TCP协议没有一定的了解是无法真正的明白HTTP的传输流程的。

网络异常,图片无法展示
|

HTTP的使用


HTTP模块主要分为创建服务HTTP.createServer和创建请求HTTP.request

  • HTTP服务创建:nodejs的http模块能够创建一个http服务,
const http = require('http')
// createServer可以用回调函数实现对客户端请求对监听,也可以通过request事件的监听来实现
const server = http.createServer((request,response)=>{
})
// 监听request事件
server.on("request",(request,response)=>{
})
// 指定通信端口
server.listen(8080, function () {
    console.log('server running at http://localhost:8080')
})
  • HTTP服务回调函数有request和reponse组成:
  • request:解析客户端的请求
  • 常用属性及方法:url(请求路径) method(请求方法)headers(头部)
  • url:请求的路径,可以根据URL设置出路由模式,express的就是基于此设置的
  • methoe:请求的方式分为,post get delete put patch
  • headers: 请求的头部,客户单的cookie,数据传输的类型等都放在header中
  • data事件:createServer想要获取请求数据体需要监听data事件
req.on('data',function(data){
      console.log('data: ', data);
  });
  • response:相应客户端请求,常用属性及方法如下:
  • end:res.end()
  • setHeader(name,content),可以设置单个header属性,可以多次设置
  • destory:取消返回
  • statusCode:设置返回的状态码,如200 404 400 500等
  • statusMessage:设置状态码对应返回的信息
  • writeHead:可以同时设置statusCode statusMessage 和多个header属性
res.writeHead(200,"success", {"Content-type" : "text/html"});
  • HTTP请求的创建,Nodejs的http模块不仅仅能作为服务器来接受请求,也能作为客户端来发送请求。
const http = require('http');
const options = {
    port: 3333,
    hostname: 'localhost',
    path: '/demo',
    method: 'POST',
    headers: {
        "Content-Type":'text/html'
    }
}
const req = http.request(options,(res)=>{
    console.log(`statusCode: ${res.statusCode}`);
    res.on('data', data => {
      console.log(data)
    });
})
req.end()
  • HTTP请求主要有请求参数和返回值组成:
  • options:请求参数主要有以下属性
  • method:请求服务端的方法
  • path:请求的路径
  • port:请求的端口
  • hostname:请求的主机名
  • headers:请求时header上的内容
  • response:请求后的返回值
  • data事件监听
res.on('data', data => {
  console.log(data)
});

总结


对于Nodejs HTTP模块的总结就到这里了,此次重新学习了下HTTP的API,对于API的了解是比较简单,只要经常使用能够掌握,但是对于HTTP的传输流程需要我们去查阅许多计算机网络的相关知识,其中TCP/IP是必须要了解的,扩散性学习能够更快的掌握新知识也能从已有的知识的推导出更多相关的知识。


相关文章
|
5天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
17 0
|
11天前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
94 62
|
4天前
|
存储 前端开发 NoSQL
拿下奇怪的前端报错(四):1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点
在一个使用MongoDB GridFS存储文件的项目中,音频和视频文件在大部分设备上播放时长显示为无限,而单独播放则正常。经调查发现,问题源于HTTP Range请求的处理不当,导致最后一个字节未被正确返回。通过调整请求参数,使JavaScript/MongoDB的操作范围与HTTP Range一致,最终解决了这一问题。此案例强调了对HTTP协议深入理解及跨系统集成时注意细节的重要性。
|
5天前
|
缓存 前端开发 安全
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
前端开发者必备:HTTP状态码含义与用途解析,常见错误码产生原因及解决策略
31 0
|
5天前
|
前端开发 JavaScript 程序员
【从前端入门到全栈】Node.js 之核心概念
【从前端入门到全栈】Node.js 之核心概念
|
5天前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
5天前
|
Web App开发 JavaScript 前端开发
对于 前端 解释下 node.js的必要性
对于 前端 解释下 node.js的必要性
7 0
|
1月前
|
前端开发 JavaScript
node反向代理,解决跨域(http-proxy-middleware)
使用node.js和http-proxy-middleware库实现反向代理,解决跨域问题,允许前端请求通过代理访问不同端口的服务。
54 3
|
2月前
|
JSON JavaScript 前端开发
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
|
2月前
|
JavaScript IDE 前端开发
前端开发工具配置 nodejs & git & IDE
前端开发工具配置 nodejs & git & IDE