对于前端开发来说,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. 第36讲 activityForResult

    第36讲 activityForResult activityForResult的作用是利用下一个activity给当前的activity传值(前一讲是利用当前activity给下一个activity ...

  2. 第28讲 UI组件之 ListView和ArrayAdapter

    第28讲 UI组件之 ListView和ArrayAdapter 1. Adapter 适配器 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的 ...

  3. 加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证

    加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证 各角色比喻 客户端:通常为请求方,要验证服务器的身份. 服务器:通常为响应方,有时也要 ...

  4. Android软键盘弹出时布局问题

    最近项目需要做一个类似聊天室的模块,基于Socket实现的,这部分稍后一段时间再做总结,功能上的相关点都实现了小例子也做出来了,最后发现一个比较腻歪的问题就是软键盘弹出时总是会把标题“挤出”屏幕,(无 ...

  5. core_cm3文件函数一览

    core_cm3是ARM公司推出来的统一规定,这是对下游芯片厂商的统一规定,因此可以再Cortex-M3(CM3)之间进行移植.此文件中定义了一些对特殊功能寄存器的C语言形式的操作,本质上是内敛汇编和 ...

  6. python - 面向对象(一)

    python是一门面向对象的编程语言,python中的一切均是对象. 有对象就提到类,对象和类就像是儿子和老子的关系,是不可分的一对. 什么是类     类就是具有一些共同特性的事物的统称.好比人类, ...

  7. Asp.Net中的消息处理---MSMQ系列学习(一)

    刚刚毕业一年,比较浮躁,上次面试被问到消息队列,觉得非常的惭愧因为不知道,所以下定决心一定要学会使用它.以前只是听说过有这么个东西,要说是什么,在什么场景下使用却是无从知晓,因为自己也确实没有在项目中 ...

  8. c#类初始化器

    其实类型初始化器只是一种语法糖这样写MyClass a=new MyClass{ filedOne="a" ,filedTwo="b" };会被编译器编译成和如 ...

  9. vb将窗体中的控件或某种颜色透明

    Option Explicit ' ******************** 窗体透明 ******************** '***Module.bas '**** Public Declare ...

  10. linux 虚拟机centos64位_6.5+VM10 主机是固定IP局域网设置代理上网,虚机设置固定ip 图文详细步骤

    一种: 虚机是Desktop 安装 1.虚拟机—设置—网络适配器子选项—选择“桥接模式” 2.在虚拟机中选择系统(System)—首选项(Preferences)—网络连接(Network Conne ...