当前位置: 首页 > 后端技术 > Node.js

Node.js系列-http

时间:2023-04-03 13:30:02 Node.js

HTTP了解超文本传输??协议(HTTP)是一种应用层协议,用于传输HTML等超媒体文档。它是为网络浏览器和网络服务器之间的通信而设计的,但它也可以用于其他目的。HTTP遵循经典的客户端-服务器模型,客户端打开连接发送请求,然后等待它从服务器接收响应。HTTP是一种无状态协议,这意味着服务器不会在请求之间保留任何数据(状态)。HTTP概述HTTP是一个应用层协议,虽然理论上它可以通过任何可靠的传输协议发送,但它仍然是通过TCP或TLS加密的TCP连接发送的。它不仅用于传输超文本文件,还可以传输图片、视频或向服务器发送HTML表格等信息。HTTP也可以根据网页的要求只获取Web文档的部分内容来更新网页。HTTP组件系统HTTP是一种客户端-服务器协议:请求是通过实体(用户代理)发出的。在大多数情况下,这个用户代理指的是浏览器,也可能是一个机器爬虫,它爬取网页来生成和维护搜索引擎的索引。每个发送到服务器的请求都会被服务器处理并返回一个消息(响应)。在客户端和服务器之间,有很多称为代理的实体,它们的功能和性能各不相同,例如,有的是网关,缓存等。实际上,浏览器之间有计算机,路由器,调制解调器等许多其他实体以及处理请求的服务器。由于Web的分层设计,隐藏了网络层和传输层的那些细节。客户端:用户代理用户代理是可以为用户启动操作的任何工具。但实际上,这个角色通常是由浏览器来扮演的。浏览器渲染一个网页,首先发送第一个请求获取页面的HTML文档,然后解析文档中的资源信息并发送其他请求获取可执行脚本或css样式进行页面布局渲染,以及其他一些网页页面资源(如图片和视频等)。然后,浏览器整合这些资源,显示出一个完整的文档,即网页。网页是一个超文本文档,其中显示的文本的一部分可能是一个链接,启动它(通常是单击鼠标)会导致一个新的网页。网页使用户能够控制客户端上网。浏览器负责发送HTTP请求并呈现HTTP返回信息,以便用户清楚地看到返回网页的内容。在上述通信过程的另一端,Web服务器由WebServer提供服务,提供客户端请求的文档。服务器只是虚拟意义上的:它可以是由许多服务器组成的计算机集群,分担负载(负载均衡),也可以是通过向其他计算机发起请求来获取部分或全部资源的复杂软件。服务器不再只是一台单独的机器,它可以是加载在同一台机器上的众多服务之一。在HTTP/1.1Host标头中,它们甚至可以共享相同的IP地址。Proxies(代理服务器)是在浏览器和服务器之间转发HTTP消息的许多计算机和其他设备。由于Web堆栈的层次结构,它们大多出现在对HTTP应用层透明的传输层、网络层和物理层,尽管它们可能对应用层的性能产生重要影响。另一部分也体现在应用层,即Proxies。代理可以是透明的或不透明的(取决于请求是否通过它们)。代理主要有以下功能:1.缓存(可以是公共的也可以是私有的,比如浏览器缓存)2.过滤(比如杀毒扫描,家长控制...)3.负载均衡(让多台服务器服务于不同的请求)4.Authentication(针对不同资源的权限管理)5.Login(允许存储历史信息)HTTP的基本特性HTTP是简单的HTTP是可扩展的HTTP/1.0中出现的HTTP头使得协议扩展变得非常容易。只要服务器和客户端就新标头的语义达成一致,就可以添加新功能。HTTP是无状态的,带会话的HTTP也是无状态的:在同一个连接中,两次成功的请求是直接无关的。使用HTTP标头扩展,HTTPCookie可以创建有状态会话。在header中加入Cookies并创建session,这样每个请求都可以共享相同的context信息,达到相同的状态。HTTP和连接连接由传输层控制,这基本上不在HTTP的范围之内。HTTP并不要求底层传输层协议是面向连接的,它只需要是可靠的,也就是说消息不能丢失。HTTP/1.0过去是为每个请求/响应打开一个TCP连接,导致2个缺点:打开一个TCP连接需要多次消息传输,速度很慢。但是,当定期发送多条消息时,这会变得更有效率。为了减少连接开销,HTTP/1.1引入了管道和持久连接的概念:底层的TCP连接可以通过Connection头进行部分控制。HTTP/2走得更远,通过连接多条消息使这个链接始终保持温暖。HTTP流程当客户端要与服务器(服务器是指最终的服务器,或者中间代理)交换信息时,流程如下:1打开一个TCP连接(或者重用之前的):TCP连接是用于发送一个或多个请求,当然也用于接收响应消息。客户端可以重用现有连接,也可以重新打开几个到服务器的新TCP连接。2发送HTTP消息(HTTP请求):HTTP消息(在HTTP/2之前)在语义上是可读的。在HTTP/2中,这些简单的消息被封装在帧中,这样可以防止消息被直接读取,但报告格式保持不变。客户端向服务器发送HTTP请求的请求报文包括以下格式:请求行、请求头、空行和请求数据四部分。3读取服务器返回的消息信息(HTTP响应):状态行、消息头、空行和响应文本。content-type:内容类型,一般是指网页中存在的content-type,用来定义网页问卷的类型和网页的编码,决定浏览器读取这个文件的格式和编码。4关闭连接或为后续请求重用连接。当HTTP流水线化开始时,可??以发送后续请求,而无需等待第一个请求的成功响应。启动一个demo,通过一个HTTP服务进行简单的增删改查操作。通过请求HTTP模块并创建服务器实例createServer,并监听8200端口,即可完成监听端口并创建HTTP实例。参考api:http://nodejs.cn/api/http.htmlconsthttp=require("http");constserver=http.createServer();server.on("request",(req,res)=>{res.end("serverhadcreated");});server.listen(8200);简单了解并启动HTTP服务后,我们就可以根据request.method操作的请求方式简单的进行数据的增删改查。consthttp=require("http");consturl=require("url");//用于URL处理与解析constserver=http.createServer();server.listen(8200);letusers=[];server.on("request",(req,res)=>{constparseUrl=url.parse(req.url);if(parseUrl.path.indexOf('/user')===-1){res.statusCode=403;res.end(`${res.statusCode}notallowed`);return;}switch(req.method){case'GET':if(parseUrl.path.indexOf('/user/')>-1){letuserName=parseUrl.path.substring(6,parseUrl.path.length);letuser=users.find(u=>u.name===userName);res.statusCode=200;res.end(JSON.stringify(users));}break;case'POST':req.on("data",(buffer)=>{constuserStr=buffer.toString();让contentType=req.headers['content-type'];if(contentType==='application/json'){letuser=JSON.parse(userStr);用户推送(用户);}res.statusCode=201;});req.on("end",()=>{res.statusCode=200;res.end(JSON.stringify(users));});休息;case'PATCH':req.on("data",(buffer)=>{letuserStr=buffer.toString();letcontentType=req.headers['content-type'];if(contentType==='application/json'){letupdate=JSON.parse(userStr);letuser=users.find(u=>u.name===update.name);console.log(user);user.address=update.address;}res.statusCode=201;});req.on("end",()=>{res.statusCode=200;res.end(JSON.stringify(users));});休息;case'DELETE':req.on("data",(buffer)=>{让contentType=req.headers['content-type'];if(contentType==='application/json'){letindex=users.find(u=>u.name===buffer.name);用户。拼接(索引,1);}res.statusCode=201;});req.on("end",()=>{res.statusCode=200;res.end(JSON.stringify(users));});休息;}});Postman为了方便模拟发送请求,我们可以下载一个发送http请求的postman,这样我们就完成了基于HTTP请求的简单数据操作。书籍推荐《图解HTTP》、《HTTP权威指南》参考链接MDN:https://developer.mozilla.org...菜鸟教程:http://www.runoob.com/http/ht...备注文章第一篇博客:http://www.cnblogs.com/aaron-...