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.报头:

writeHead()
setHeader()
getHeader(类型参数)
removeHeader()
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字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值