对于前端开发来说,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. 第27讲 UI组件之 ScrollView与底部动态添加数据

    第27讲 UI组件之 ScrollView与底部动态添加数据 1. ScrollView(滚动视图) ScrollView(滚动视图)是实现滚动的一个控件,只需要将需要滚动的控件添加到ScrollVi ...

  2. UIImagePickerController从拍照、图库、相册获取图片

    iOS 获取图片有三种方法: 1. 直接调用摄像头拍照 2. 从相册中选择 3. 从图库中选择 UIImagePickerController 是系统提供的用来获取图片和视频的接口: 用UIImage ...

  3. How to build UDK2015?

    UDK2015 is a stable release of portions of the EDKII project. 本文记录在Win7下用VS2012 编译UDK2015的过程. Step1, ...

  4. javascript 模仿 html5 placeholder

    <form action="?action=deliver" method="post" class="deliver-form"&g ...

  5. ASP.NET网页抓取数据

    我的数据通过一个TextBox输入,这些代码是写在一个button的点击事件里的. 网页数据抓取大概分为两步,第一步是获取网页源代码: 具体注释如下: var currentUrl = TextBox ...

  6. WebApi2官网学习记录---Attribute Routing

    从WebApi 1迁移到WebAPI 2要改变配置代码如下: WebApi 1: protected void Application_Start() { // WARNING - Not compa ...

  7. VS2015 新Web项目(C#6)出现CS1617异常的解决

    VS2015 新Web项目(C#6)出现CS1617错误的解决 VS2015新增了对C#6的支持. 在新的Web项目模板中通过引入nuget包Microsoft.CodeDom.Providers.D ...

  8. lambda语法

    (参数列表) => 表达式或者语句块 s => (s.IndexOf("a") > -1 其中:参数个数:可以有多个参数,一个参数,或者无参数.表达式或者语句块: ...

  9. VC 串口通信类

    为了节省时间,我就贴出来吧 头文件 SerialPort.h /******************************************************************** ...

  10. FileUpload

    一upload原理: 1.表单的method必须是post方法 2.enctype属性必须是“mutipatr/form-data”类型 enctype默认的属性是“application/x-www ...