zoukankan      html  css  js  c++  java
  • 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应用
     
        
     
        
  • 相关阅读:
    VBA代码分行
    Excel VBA 操作 Word(入门篇)
    Excel公式与函数——每天学一个
    VBA二次学习笔记(1)——文件操作
    架构探险——学到的知识
    架构探险——搭建框架
    文件下载
    文件上传
    jdbc中的细节
    json
  • 原文地址:https://www.cnblogs.com/xiaoheimiaoer/p/3982134.html
Copyright © 2011-2022 走看看