美文网首页
构建web应用

构建web应用

作者: 励志摆脱懒癌的少女酱 | 来源:发表于2018-07-30 15:55 被阅读10次

简介

  1. request事件
      request事件发生于网络连接建立,客户端向服务器端发送报文,服务器端解析报文,发现HTTP请求的报头时。
  2. request事件侦听器:高阶函数
      传递给createServer()方法一个function(req,res){}这类函数做参数即可。


    Express的原理即是如此:app就是一个函数作为request事件的侦听者

基础功能

  • 报文首行:req.method + req.url +http版本
  • 报文头部:req.headers;
  1. 请求方法:req.method;
  2. 路径解析:req.url;Node提供url模块—url.parse();
  • 客户端代理(浏览器)会将完整的url地址解析成报文,将路径和查询部分放在报文头,hash部分会被丢弃
  1. 查询字符串:?x1=x&x2=x;Node提供querystring模块将其转为JSON对象—querystring.parse(url.parse(req.url).query);=== url.parse(req.url, true).query;若字符串中的键出现了多次,它的值是一个数组;
  2. cookie:标识和认证一个用户
  3. session(有效期通常20min):解决cookie敏感数据的保护无效问题(前端可以通过document.cookie修改)—存于服务器端,数据安全性得到一定保障,而且数据也无须在协议中每次都被传递;
    (1)session与内存:采用专门的缓存服务—redis、memcached等;
  • 原因:
    • Node与缓存服务保持长连接而非短链接,握手延迟只影响初始化;
    • 高速缓存直接在内存中进行数据存储和访问;
    • 缓存服务通常与node进程运行在相同的机器或机房,网络速度受到的影响较小;
  • 优点
    • 解决node的内存上限问题—性能问题;
    • 解决多个node进程之间内存不共享的问题—session集中化;
  • 缺点:相比直接在内存中访问慢;
  1. 缓存
  2. Basic认证
  3. 数据上传:http模块只对http报文的头部进行了解析,然后触发request事件,其内容部分通过data事件触发,以流的方式处理—将接收到的Buffer列表转化为一个Buffer对象后,再转为没有乱码的字符串;
    (1)表单数据:请求头:Content-Type: application/x-www-form-urlencoded;其报文体内容与查询字符串相同,通过querystring.parse()解析
    (2)JSON文件:请求头:Content-Type: application/json;使用JSON.parse()处理;
    (3)XML文件:请求头:Content-Type: application/xml;通过xml2js库将xml文件转为json对象:xml2js.parseString
    XML文件解析
  4. 附件上传
  • 普通表单:Content-Type: application/x-www-form-urlencoded—内容通过urlencode的方式编码内容形成报文体,再发送给服务器端;
  • 含文件的表单(file类型的控件):指定Content-Type: multipart/form-data
    file控件的表单在浏览器构造的请求报文头
    • boundary=随机字符串xx用以分割报文体的内容:报文体的内容将通过在xx签名添加--进行分割,报文结束后在xx前后添加--标识结束;
    • Content-Length:必须确保报文体的长度;
      eg:上传div.js文件,其生成的报文体如下:
      第一个Content-Disposition是普通的表单控件,第二个是file控件:其name对应表单控件的name属性
  • node层处理—formidable模块:当接收大小未知的数据量时需要异步处理—基于流式处理解析报文,将接收到的文件写入系统的临时文件夹中,并返回对应的路径
    业务逻辑只要检查req.body和req.files即可
  1. 数据上传与安全
    (1)内存限制
  • 问题描述
      在解析JSON文件、xml文件和普通表单数据都是先保存用户提交的所有数据,然后再解析处理,最后才传递给业务逻辑—仅适合数据量小的提交请求,攻击者通过客户端模拟伪造大量数据,每次攻击者提供1M的内容,只要并发量一大,内存很容易被吃光;
  • 解决方案:
    • 限制上传内容的大小,一旦超过限制,停止接收数据,响应400状态码;
    • 通过流式解析,将数据导向磁盘中,Node只保留文件路径等小数据;
      (2)csrf

相关文章

  • AngularJS

    AngularJS 是什么 概念:AngularJS主要用于构建单页面Web应用,是一种构建动态Web应用的结构化...

  • 构建web应用

    简介 request事件  request事件发生于网络连接建立,客户端向服务器端发送报文,服务器端解析报文,发现...

  • Node.js 学习(三): 构建 Web 应用(服务器端)

    1. 构建 Web 应用(服务器端) 1. 构建 Web 应用(服务器端)1.1. 基础功能1.1.1. HTTP...

  • Spring Boot JPA访问Mysql

    上篇演示了通过Maven构建Spring Boot 项目,引用web模块启动应用,完成简单的web 应用访问,本章...

  • 前端学习:《Vue.js快跑》中英文PDF+《Vue.js项目实

    《Vue.js快跑:构建触手可及的高性能Web应用》是用Vue.js构建Web应用的全方位指南。作者运用细致入微的...

  • 深入理解nova api服务

    一、wsgi简介 在构建 Web 应用时,通常会有 Web Server 和 Application Server...

  • nodejs 构建web应用

    前言:最近在看深入浅出nodejs第八章构建web应用。想把自己的阅读写成总结。也希望给他们做一个参考。常使用no...

  • NODE 构建Web应用

    构建web应用会遇到的问题 请求方法的判断 URL路径的解析 URL中查询字符串的解析 Cookie的解析 表单数...

  • Node——构建Web应用

    基础功能 之前我们通过http模块创建了一个简单的服务器,但是对于一个网络应用来说肯定是远远不够的,在聚义的业务中...

  • Node - 构建web应用

    基础功能 对一个web应用而言,具体的业务中,我们可能有如下需求: 1.请求方法的判断 2.URL的路径解析 3....

网友评论

      本文标题:构建web应用

      本文链接:https://www.haomeiwen.com/subject/fxkfmftx.html