zoukankan      html  css  js  c++  java
  • 深入浅出node读书笔记(六)

      本篇文章主要介绍在构建web应用里面的一些基础知识的原理性内容,比如上传数据,路由解析等!

      (1)路径解析:在一个http请求报文头部有这么一条信息:>GET /path?foo=bar HTTP/1.1

        ①其中在node的HTTP_Parse模块解析时候,把GET提取出来变为req.method   把url解析为req.url(里面包括url以及get方法传递的参数)

        ②请求的url一般是查询对应的controller:/controller/action/a/b/c. 其中action对应控制器的行为,其余的值作为参数。

          var url=url.parse(req.url).pathname;//url内容

          var query=url.parse(req.url,true).query;//参数解析为一个json结构,注意:如果键出现多次,对应的值将会是一个数组,因此处理前需要判断其数据类型。

      (2)cookie:cookie是服务器给客户端的一个标识,客户端每次请求服务器时候都要带上这个标识。

          HTTP_Parse模块把所有的报文字段解析到req.headers,所以cookie所在位置就为:req.headers.cookie;cookie中的值一般是key=value;key=value;形式的。

          服务器设置cookie时候Set-cookie方法会设置几个属性:其中path是表示该cookie作用的路径。Expires和Max-Age是表示该cookie啥时候过期,HttpOnly告知浏览器不允许通过js脚本修改cookie值。Secure设置为true表示该cookie只在https协议中有效。

      (3)session: session是存储于服务器端的用于记录状态的数据,通过与cookie一一对应来实现客户端与服务器端数据的对应,可以说,session依赖于cookie而存在,但是此时所说的cookie只是一个秘钥。

        session存储在服务器的内存中,但是如果session过多会造成内存被用光,导致程序崩溃,而且多核cpu启动多个进程之间内存不共享,导致session直接存在内存中会出现一些问题,于是有了将session集中化的工具:Redis,Memcached等。

      (4)缓存:缓存存在的目的是为了节约带宽,优化用户体验,不用每次请求都重新向服务器加载所有内容。

          关于缓存的规则:添加Expires或者Cache-Control到报文中。其中Expires是一个GMT格式的时间字符串,表示缓存过期时间,超过该日期即过期。Cache-Control则需要设置一些属性:max-age   no-cache之类。表示缓存的有效时间和不要缓存。node里面对两者都有支持,当后者存在时候覆盖前者。

      (5)页面渲染:MIME:浏览器正是通过不同的Content-Type来决定不同的渲染方式,我们成为MIME。

    //按文本解析
    res.writeHead(200, {'Content-Type': 'text/plain'});
    //按html解析
    res.writeHead(200, {'Content-Type': 'text/html'});

        附件下载:Content-Disposition: attachment; filename="filename.ext"    如果设置Content-Disposition属性为attachment,即说明该文件被客户端当做附件下载,后边的filename是文件名字

      (6)模板:从本质上来说,模板做的就是拼接字符串这种比较底层的工作,把表达式等替换成对应的值

    后记:话说。。。这本书真尼玛难懂,讲的是各种原理性的东西,鉴于目前水平所限,一些章节压根就读不懂是在干嘛的。。。。还有一些各种模块的底层实现原理等,各种烧脑,所以很多东西都进行了及其简略的描述,有些章节对于开发项目暂时用不到,就先略过。。。。。。总之,这本书暂时告一段落,下一本开始《node与express开发》,加油。。。

  • 相关阅读:
    MPF源码分析之资源文件加载
    oracle存储过程代码日志记录
    fix8源码分析之日志模块
    oracle日期转整数
    记录OCI操作一个诡异的问题
    记录一个虚拟机重启网络启动失败问题
    buff占用内存高
    MFC程序编译链接问题汇总一
    回调函数模型设计
    利用call与apply向函数传递参数
  • 原文地址:https://www.cnblogs.com/jakii/p/5128346.html
Copyright © 2011-2022 走看看