对于前端开发来说,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应用
 
    
 
    

web应用,我们需要了解什么?的更多相关文章

  1. C# Web应用调试开启外部访问

    在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...

  2. 网页提交中文到WEB容器的经历了些什么过程....

    先准备一个网页 <html><meta http-equiv="Content-Type" content="text/html; charset=gb ...

  3. 闲来无聊,研究一下Web服务器 的源程序

    web服务器是如何工作的 1989年的夏天,蒂姆.博纳斯-李开发了世界上第一个web服务器和web客户机.这个浏览器程序是一个简单的电话号码查询软件.最初的web服务器程序就是一个利用浏览器和web服 ...

  4. java: web应用中不经意的内存泄露

    前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下: 1.定义一个类App package com.cnblogs. ...

  5. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  6. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

  7. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  8. Web性能优化:What? Why? How?

    为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...

  9. Web性能优化:图片优化

    程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...

  10. 使用ServiceStack构建Web服务

    提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛.首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Bu ...

随机推荐

  1. 新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子

    新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子 型牌男装:网上订服装,如何将返修率降到5个点以下

  2. Button和ImageButton

    Button----button ImageButton----图片button 共同拥有特征: 都能够作为一个button产生点击事件 不同点 1. Button有text的属性.ImageButt ...

  3. Go程序GC优化经验分享

    http://1234n.com/?post/yzsrwa 最近一段时间对<仙侠道>的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验. 游戏第一次上线的时候,大部分精力都投 ...

  4. Qt 界面使用自己定义控件 &quot;提升为&quot;

    1.效果图 我做了一个很easy的样例,一个能够显示颜色的QLabel,边上有个button,点击,跳出颜色选取的Dialog,然后选择一个颜色.这个QLabel会变成什么颜色. 2.ColorLab ...

  5. JQuery.ajax一解

    关于JQuery.ajax方法,好处也不用多说了,主要是想记下ajax中的一些参数: url:请求的目标地址,为一个字符串,格式为:http://localhost:端口号/User/方法名.eg:现 ...

  6. Asp.Net HttpApplication请求管道与Session(二)

    Asp.Net 回话的创建与结束 LogHelper.LogHelper _log = new LogHelper.LogHelper(); /// <summary> /// 程序开始- ...

  7. (转)[老老实实学WCF] 第一篇 Hello WCF

    http://blog.csdn.net/songyefei/article/details/7363296#comments 老老实实学WCF  第一篇 Hello WCF WCF(Windows ...

  8. Oracle内链接+外连接详解

    inner join(内连接) 内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据.也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表 ...

  9. C# 如何获取错误所在行数

    两种方法,一种是利用error.StackTrace,另外一种是try-catch找到错误行数,具体如下: 一.error.StackTrace代码 int i = ex.StackTrace.Ind ...

  10. Asp.net mvc4 + HighCharts + 柱状图

    前端代码: @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport ...