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

通过Nodeexpress服务器程序深入理解HTTP请求(一)

时间:2023-04-03 15:57:22 Node.js

代码仓库:https://github.com/jczzq/cool...HTTP知识总结HTTP(HypertextTransferProtocol)是客户端(浏览器))和服务器端(server)请求和响应的标准。记录http请求和响应信息的代码称为消息。HTTP动作HTTP/1.1协议定义了八种操作指定资源的方法:GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS、CONNECT。HTTP消息HTTP消息由4部分组成:请求(响应)行(第一行,以下简称起始行)头字段(第一行之后,纯文本字符串,键名和键值对,以冒号分隔,结尾为回车(CR)和换行(LF)符号的序列。)空行请求体(可选的HTTP消息体数据)HTTP头域HTTP头域(HTTP头域)是指HTTP请求和响应消息中的头域。它们定义HTTP事务的操作参数。HTTP头字段根据实际使用分为以下4种类型:GeneralHeaderFields:消息头,既适用于请求消息,也适用于响应消息,但与最终消息体中传输的数据无关。请求标头字段:包含有关要获取的资源或客户端本身的更多信息的消息标头。响应标头字段:包含有关响应的补充信息的标头,例如其位置或服务器本身(名称和版本等)。EntityHeaderFields:包含有关实体主体的更多信息,例如主体长度(Content-Length)或其MIME类型。请求者的头部结构:generalheader|请求标头|entityheader响应者的头结构:generalheader|响应头|entityheader需要注意的是,requestheader并不是按照我们理解的语义来分类的,而是按照RFC文件标准已经分类的。Accept属于请求头,Content-Type属于实体头。HTTP头字段可以根据需要自行定义,因此在Web服务器和浏览器上可能会发现非标准的头字段,按照惯例,非标准协议头字段通过在字段名称前加上X-来标识。但是这个约定在2012年6月被弃用了,因为它在非标准字段成为标准字段时造成了很多不便。准备工作这是我的测试表格:

{{form.name}}|动作=“{{form.action}}”|方法="{{form.method}}"|enctype="{{form.enctype}}"

动作:

name:

方法:{{item}}

enctype:{{item}}

头像:

服务器端脚本:constpath=require('path');constexpress=require('快递');varapp=express();//设置静态文件目录app.use(express.static(path.resolve('./static')));console.info('静态文件目录:',path.resolve('./static'));//首页app.get('/',function(req,res){res.sendFile(path.join(__dirname,'./index.html'));});app.use('/user',(req,res,next)=>{//returnres.json({//query:req.query,//params:req.params,//主体:req.body//});returnres.sendStatus(200);});app.listen(3000,'0.0.0.0',()=>{console.log('启动服务器:http://localhost:3000');});1.提交表单时,表单中的数据将如何处理?表单提交具有三个关键属性:action、method和enctype。这三个参数分别指定了http请求报文的路径、动作以及如何对消息实体进行编码。前两个不做详细介绍,下面会详细介绍enctype属性。HTML5Form的enctype有三个枚举值:application/x-www-form-urlencodedForm表单默认编码方式,当method="GET"时,表单值会自动处理成(?name1=value1&name2=value2...)结构参数并将其附加到操作指定的url。multipart/form-data表单包含文件提交的强制编码格式。text/plain表单数据以纯文本编码。application/x-www-form-urlencoded可以看到GET表单提交的数据默认是用application/x-www-form-urlencoded编码的。附加到url。服务器默认响应的Content-Type是text/plain。我们来看看通过表单POST提交的消息。请求报文头域Content-Type明文显示为application/x-www-form-urlencoded,响应报文头域Content-Type依然是默认的text/plain纯文本。multipart/form-data接下来看第二个multipart/form-data,上传一张图片23333.jpg。观察请求报文,头域Content-Type就是我们设置的multipart/form-data,并且指定了一个具体的取值边界,将请求实体编码成一整条报文,里面的数据用分隔符边界分隔开来变成了多个部分,每个部分的描述都不一样。其中,我们上传的文件23333.jpg已经被处理成乱码。text/plain接下来看第三个text/plain,还是上传一张图片23333.jpg。头域Content-Type是我们设置的text/plain纯文本,服务器的响应也是纯文本。参考链接HTTPheaderfield-WikipediaHTTPHeaders-MDN对HTTPContent-Type的描述如有不足之处,还请指正。