深入浅出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开发》,加油。。。