原生node的header
首先引入http模块
获取http.ServerResponse对象的方式,
1.http.createServer(function(req,res){}) 其中res是http.ServerResponse对象
2.var server = http.createServer().listen(9332,'localhost')
server.on('request',function(req,res){}) server的request对象的request事件中,res为http.ServerResponse对象
http.ServerResponse对象的方法:
1.报头:
1.writeHead()
2.setHeader()
3.getHeader(类型参数)
4.removeHeader()
5.addTrailers() 追加头信息
2.报文
1.write() 报文内容,返回值是true/false
2.end() 结束响应,必须调用end()方法,否则是超时,没有响应.
3.setTimeout() 服务器没有响应时,触发这个事件.
http.ServerResponse对象的属性:
1.headerSent 当头部已经有响应后,res.headerSent 为true 否则为false.可以通过这个属性来判断是否已经响应.
2.statusCode
3.sendDate true/fasle 当为false时,将删除头部时间
http.ServerResponse监听的事件
1.timeout事件
2.close事件
3.request事件
4.checkContinue事件
5.connect事件
6.clientError事件
设置头部信息,有两个方法:
1.setHeader(name,value)方法可以调用多次,但真正写入到头部的必须调用一次writeHead()
2.http.ServerResponse.writeHead(statusCode[,reasonPhrase][,headers]) 其中headers 为设置的头对象
3.设置的头部信息的内容:
content-type: 内容类型, [type]/[subtype]; parameter
location: 将客户端的请求重定向
content-disposition: 指定一个被下载的文件名
content-length: 服务器响应的字段数
set-cookie:设置cookie
Cache-Control: 开启缓存
Expires:缓存失效时间
Etag:当服务器没有变化时,不重新下载文件
(1)content-type的类型,这是几个大类,然后后面是具体的小类:
Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
Application:用于传输应用程序数据或者二进制数据;
Message:用于包装一个E-mail消息;
Image:用于传输静态图片数据;
Audio:用于传输音频或者音声数据;
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
(2)通常还有一些设置跨域的内容:
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
res.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
报文信息:
在调用res.end()之前可以多次调用res.write()方法,res.write()返回一个true/fasle,
当没有响应或者超时时(这种情况遇到很多次,进程没有挂掉,一直处在无响应,但是客户端一直可以请求),res.setTimeout(毫秒数,callback),当超时时,会触发res.on(timeout,function(){}),如果没有回调函数,则自动调用end()结束请求.
当网络较好,数据量较少时,,将数据直接发送到上操作系统的内核缓存区,然后从内核缓存去取出数据发送给对方.返回值是true
当数据比较大,网速慢时,先将数据缓存在内存中,如果客户端可以接收数据了,再将数据发送到内核缓存区中,最后发送给对方.返回值是false
因此在大量数据的时候,会有内存爆满.
这是在并发情况下的用async做的控制,
当集合中元素很多,不能一次全部并行操作,又不想一个一个按顺序来,可以使用forEachLimit函数。它可以设定一批处理几个,每一批内并行执行,批与批之间顺序执行。
async.forEachLimit(eles, 5000, (list, cb) => {
// do something;
});
获取req的报文信息
通过req.对象来获取(req对象参考上面的获取方法)
req.属性包含以下属性:
1.method:客户端请求的方法
2.url:客户端请求的url
3.headers:请求头对象,包含cookies和浏览器信息(报文)
Connection:keep-alive
Content-Length:874
Content-Type:application/json; charset=utf-8
Date:Fri, 20 Jan 2017 03:25:38 GMT
ETag:W/"36a-yQDJ0iz/THXt81YLCAOKTg"
Vary:X-HTTP-Method-Override
Via:1.0 am-forward (squid/3.1.23)
X-Cache:MISS from am-forward
X-Cache-Lookup:MISS from am-forward:3128
X-powered-by:www.yunshipei.com
accept-encoding: 'gzip, deflate, sdch' //说明浏览器支持的压缩格式
httpVersion: http协议版本号
socket:客户端监听的socket对象
对于传输的压缩的处理请参考:http://www.poluoluo.com/jzxy/201504/353581.html.这时不仅要判断content-encoding还要与客户端协商一致.
获取部分内容
在头部中设置:
1.Range: bytes=5001-10000 //5001-10000字节
2.Range: bytes=5001- //5001字节以后的
3.Range: bytes=-3000,5000-7000 //从一开始到3000字节和5000-7000字节
原生node的header的更多相关文章
- 原生node写一个静态资源服务器
myanywhere 用原生node做一个简易阉割版的anywhere静态资源服务器,以提升对node与http的理解. 相关知识 es6及es7语法 http的相关网络知识 响应头 缓存相关 压缩相 ...
- 原生node实现简易留言板
原生node实现简易留言板 学习node,实现一个简单的留言板小demo 1. 使用模块 http模块 创建服务 fs模块 操作读取文件 url模块 便于path操作并读取表单提交数据 art-tem ...
- node.js系列(实例):原生node.js+formidable模块实现简单的文件上传
/** * 原生node.js结合formidable模块实现图片上传改名 * @Author:Ghost * @Date:2016/07/15 * @description: * 1.引入模块htt ...
- node.js系列(实例):原生node.js实现接收前台post请求提交数据
前台界面: 前台代码: <form class="form-horizontal" method="post" action="http:127 ...
- 编写原生Node.js模块
导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...
- NW.js安装原生node模块node-printer控制打印机
1.安装原生node模块 #全局安装nw-gyp npm install -g nw-gyp #设置目标NW.js版本 set npm_config_target=0.31.4 #设置构建架构,ia3 ...
- koa 基础(十)原生node.js 在 koa 中获取表单提交的数据
1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...
- 使用原生node.js搭建HTTP服务器,支持MP4视频、图片传输,支持下载rar文件
前言 如何安装node.js,如何搭建一个简易的http服务器我这里就不再赘述了,不懂的同学可以先去学习一下.当然了,我写的也就属于简易版的增强版,大家有什么高见的欢迎提出,然后进入正题. 目录结构 ...
- node.js系列(实例):原生node.js实现静态资源管理
/** * node入门之综合案例(一):简易路由 * @Author : by Ghost * @Date : 2016/07/11 * @Description : * 1.引入以下模块 * ht ...
随机推荐
- 【leetcode】Spiral Matrix
题目概要: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spi ...
- 11.ok6410之led驱动程序编写
led驱动程序编写 本文主要包含三部分,led驱动程序led.c编写,编译驱动程序的makefile的编写,以及使用驱动程序的应用程序led_app的编写 一.led.c编写 #include < ...
- mysql数据库的安装与使用
ubuntu下面的mysql安装 sudo apt-get install mysql-server 安装后,登陆 mysql -u root -p mysql -h 主机名 -u 用户名 -p -h ...
- Appirater -- app中提示用户为app评价的提示框
Appirater是一段你可以嵌入自己工程中的代码,在用户使用应用一段时间后会自动弹出提示用户进行评分. 使用Appirater方面,你可以简单把源代码嵌入你的app工程中,并把以下代码添加至它的委托 ...
- python中定义函数和参数的传递问题
作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 数据结构之KMP算法next数组
我们要找到一个短字符串(模式串)在另一个长字符串(原始串)中的起始位置,也就是模式匹配,最关键的是找到next数组.最简单的算法就是用双层循环来解决,但是这种算法效率低,kmp算法是针对模式串自身的特 ...
- iOS 隐藏键盘的几种常见方法
1.设置return key,然后为Did End On Exit事件添加响应方法,并在方法内添加代码:[self.textfieldName resignFirstResponder]. 2.将背景 ...
- js 闭包之一
既然说闭包的化,我们就先来说说函数.慢慢的进入进入正题 (1)函数申明 f1(); function f1(){ alert(") }//结果 1 (2)函数定义 f1();var f1=f ...
- Android 图标尺寸与设计
样例和图解 外框:整体大小 ↑ 边框:图标留白大小 ↓ 图标:外图标的大小 ↑ 阴影:阴影特效大小 ↓ 图形:内图标的大小 ↑ 可选视图权重:使用两种类型的图形尺寸可以达到统一的视觉权重(可选), ...