数据上传
node的http模块(HTTP_Parse)只对http头部进行解析,内容部分通过data事件触发,以buffer方式处理
|
|
数据处理
表单数据
:Content-Type: application/x-www-form-urlencoded,内容格式和查询字符串相同,foo=bar&baz=val
|
|
json数据
:Content-Type: application/json; charset=utf-8 可能附带编码信息
var mime = function(req) {
var str = req.headers['content-type'] || '';
return str.split(';')[0];
};
|
|
xml数据
:Content-Type:application/xml
|
|
附件上传
- 特殊表单,包含file控件
- 指定表单属性enctype=”multipart/form-data”
Content-Type: multipart/form-data; boundary=AaB03x Content-Length: 18231
内容可能是由多部分组成,boundary指定每部分内容分界符
|
|
数据上传与安全
内存限制
- 限制上传内容大小,超过限制就不接受并发返回400
- 流式处理,将数据流保存在磁盘,node只保存文件路径
通常node会先保存用户提交的数据,但提交数据过大时,会导致内存占光
Connect对上传数据量的限制方式
|
|
CSRF
- Cross-Site Request Forgery 跨站请求伪造
虽然用户通过浏览器访问服务器的Session ID不能被第三方知道,但攻击者可以在另外的网站上构造请求,然后浏览器会根据路由匹配取出cookie并提交到想攻击的服务器
解决方法
:添加随机值 在请求时携带
|
|
路由解析
文件路径型
静态文件
: url的路径和网站目录路径一致
动态文件
: 服务器根据url路径找到对应的文件,再根据后缀找到脚步的解释器
MVC
- 控制器 Controller 行为集合,根据url找到对应的控制器和行为
- 模型 Model 数据操作封装
- 视图 View 视图渲染,调用视图和相关数据进行页面渲染,输出到客户端
手工映射
需要手工配置路由,但url格式灵活
|
|
- 正则匹配
在注册路由时将路径转为一个正则表达式,然后用它来匹配
|
|
自然映射
- 按照约定的方式去查找
|
|
RESTful
- Representational State Transfer (资源)表现层状态转化
- 将服务器提供的内容看做有个资源,每一个URI代表一种资源
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现对资源的操作
- 无状态 客户端和服务器交互的过程中是无状态,即服务器不保存用户状态信息(无session)
对服务器上的资源可以用URI(统一资源定位符)指向它,然后通过URI与资源互动,就是http的四个动作:GET、POST、PUT、DELETE
RESTful架构的状态包含两个,一是应用状态,二是资源状态。应用状态是与某一请求相关的状态信息;资源状态是服务器资源在某一时刻的特定状态,任何请求在同一时刻都会获得这一状态。RESTful的无状态是不保存应用状态,需要由请求方在请求时提高
应用无状态的服务器,可以自由调度请求,更好的实现负载均衡,分布式,并减少宕机带来的风险。