web应用,咱们须要了解什么?

    对于前端开发来讲,web应用咱们并不陌生。今天想要讨论一下,在开发一个web应用的时候,咱们须要一些基本的知识储备。咱们知道,一个web应用脱离不了(request)请求和响应(response),咱们全部想要的的东西,想作的事情都脱离不了它们。那么咱们具体须要关注那些知识点呢?在nodejs中,又是怎么实现和运用的呢?下面咱们详细了解一下。
 
    1.请求方法
    使用浏览器访问任意一个网站,抓包查看网络请求,都会在request header报文中发现这么一行
    
GET / HTTP/1.1 //访问http://www.so.com的结果
  //第一个是请求方法;第二个是访问路径;第三个是HTTP版本号

  

    第一个值就是咱们这里要说的请求方法,咱们能够经过监听node服务的连接,来响应用户的请求。
    
function(req, res) {
        //使用req.method接收不一样类型的请求,并作相应的处理
        //method的值有:GET POST PUT CONNECT DELETE
    }
    上面的作法,能够根据请求方法将业务逻辑分发。
 
    2.路径解析
    在请求方法中,也讲到请求报文第一行第二部分的值就是该请求的路径。咱们node服务器在接收到这个路径请求的时候,会经过两种形式来响应请求。
    第一种是静态文件,能够经过路径直接读取文件内容,而后给出响应。
    须要注意的是,在nodejs中url模块能够处理url相关的操做。
    
var url = require('url');
    var fs = require('fs');
    function(req, res) {
        var pathname = url.parse(req.url).pathname;
        fs.readFile(pathname, function(err, file) {
            if(err) {
                //返回404
                return;
            }
            res.end(file); //正常返回
        });
    }
    第二种,就是本身实现一种路由规则,当访问某个地址的时候,根据定义的路由规则读取不一样的资源,而后给出相应的响应。
 
    3.查询字符窜
    仍是在请求报文第一行的第二部分,除了有路径以外,还会存在一些咱们须要传递的参数--也就是查询字符串。一样node提供了querystring模块,处理这部分数据。
   
 var url = require('url');
    var querystring = require('querystring');
    function(req, res) {
        var query = querystring.parse(url.parse(req.url)).query;
        //注意查询字符串中的键出现屡次,结果是一个数组
    }
 
    4.cookie与session
    cookie的设置存在两种状况,第一种经过服务端的set-Cookie给浏览器设置cookie,第二种则是浏览器脚本(javascript),两种设置的最终效果是相同的。
    关于cookie的基本使用我就不作过多说明了,主要注意一下几点:
  • 每次浏览器都会把cookie发送给服务端
  • cookie设置了http-only的话,前端不能经过document.cookie进行获取
  • cookie设置secure为true时,只能经过https传输
  • cookie的安全问题,防止xss和csrf问题出现
    cookie自己没有大小限制,他的全部限制来自浏览器和服务器的配置。固然合理的使用cookie才能对页面的性能和安全有保障。
 
    session是为了解决cookie大小和安全性的一种方案,他是服务端生成的,存在于内存中。他也可使用一些加密算法,让session更加安全的传输。为了解决session的共享问题,咱们一般会使用memacha、redis等第三方工具来管理。在nodejs中,自己并无提供session功能,可使用session模块来使用。
 
    5.缓存
    在B/S模式中的页面,不少状况下不会频繁的更新,这个时候若是每次访问都要请求的话,一方面对资源是一种浪费,另外一方面可能花费比较长的时间,随意缓存技术就应运而生啦~
    为了提升性能,YSlow有这么几条缓存的规则:
  • 添加过时时间
      存在的问题:首先这个时间自己存在偏差,其次可能个人修改时间变了,可是个人内容没有变化,个人本意是只有在内容发生变化的时候才会从新请求,这种方式的话,就会增长一部分请求。
  • 配置Etag
      解决的问题:解决过时时间存在的问题,这个值是服务器设置的,在nodejs中,须要本身实现。原理是检测到文件改变才会调整这个的值,反之保持不变。
  • 数据缓存
      问题:确认一次请求不会改变的数据才作缓存,若是对数据实时性要求比较高的话,就不能使用了,因此使用起来必定要谨慎。
    
 
    总结说来,以前咱们使用的apache、nginx帮咱们处理不少,咱们不须要关心的配置。而在nodejs中,这些都须要本身实现。
 
 
参考资料:
    《深刻浅出nodejs》--构建web应用
相关文章
相关标签/搜索