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应用
 
    
 
    
posted @ 2014-09-19 19:23  黑MAO  阅读(2187)  评论(0编辑  收藏  举报