nodejs http模块
2015-10-08 21:03
621 查看
http模块
node.js使用了单线程,非阻塞的事件编程模式。node.js异步式io:顾名思义异步io就是不会一直阻塞io接口,使得程序占用cpu且能够继续执行下去并且有效提高程序执行效率。 程序瓶颈主要在于两方面:io利用率,cpu利用率。
node.js服务器解析
var http = require('http'); //require是node.js用于导入函数库的,不是js自带的功能,并且js没有相关功能 http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('<h1>Node.js</h1>'); res.end('<p>Hello World</p>'); }).listen(3000); //http.createServer函数的参数requestListener是一个函数,并且该函数会自动加入到request事件的监听队列中,从而实现单线程多事件。 //function(req,res)就是function (request, response) { }。而request是http.IncomingMessage的一个实例,response是http.ServerResponse的一个实例 console.log("HTTP server is listening at port 3000."); //node命令可以直接执行js文件,可以直接让console.log输出,平时可以用它学学js,调调代码什么的。
上面谈到了http.IncomingMessage和http.serverResponse,下面就学习http模块
http.IncomingMessage:一个 IncomingMessage对象是由 http.Server或http.ClientRequest创建的,并作为第一个参数分别传递给'request'和'response' 事件。它也可以被用来访问应答的状态,头文件和数据。
req.httpVersion 用于表示接受请求/响应时的http协议版本
req.headers 用于表示接收的http请求/响应的http头部
req.method 用于表示接受的http请求使用的方法。“get” "head"等等
req.url 用于请求时的url字符串 与http报文中的http方法后跟的url一致
req.statusCode 用于表示接受相应时的状态码
http.ServerResponse:类名 下列的res是它的一个实例
res.writeHead(statusCode,[reasonPhase],headers),向请求回复响应头,而不是设置响应头。注意该方法只能在当前请求中使用一次。 可以选择性的吧人类可读的原因短语作为第二个参数。举例如下
var body = 'hello world'; response.writeHead(200, { 'Content-Length': body.length, 'Content-Type': 'text/plain' });
res.writeContinue() 发送http 100状态码
res.statusCode 表示http的状态码 可写
res.statusMessage 可写 用于设置response的状态消息
res.setHeader(name,value) 用于设置header头部的属性,如果属性的值有多个,那么value就是一个数组,否则是一个字符串
response.setHeader("Content-Type", "text/html"); response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);
res.headerSent 布尔值,如果头部被发送,值为True,否则为false
res.removeHeader(name) 移除http头部的某一项
res.getHeader(name) 获取http头部的某一项
res.write(chunk[,encoding][,callback]) 用于写入http的body,当res.write被调用时,http的头部和body将会发送给客户端。
res.end([data],[enconding]) 当所有的响应报头和报文被发送完成时这个方法将信号发送给服务器;服务器会认为这个消息完成了。 每次响应完成之后必须调用该方法。如果指定了参数 data , 就相当于先调用 response.write(data, encoding) 之后再调用 response.end()
http.get 因为大部分的请求是没有报文体的GET请求,所以Node提供了这种便捷的方法。该方法与http.request()的唯一区别是它设置的是GET方法并自动调用req.end()。
相关文章推荐
- 如何调试 Android 上 HTTP(S) 流量
- RTP/RTCP协议
- TCP的三次握手和四次挥手
- C#检测网络状态
- Linux内核工程导论——网络:网络特性
- auto_ptr浅析 http://www.cnblogs.com/qytan36/archive/2010/06/28/1766555.html
- 导入https证书
- http://q.cnblogs.com/u/819749/
- IIS7.5 Error Code 0x8007007e HTTP 错误 500.19 推荐
- Tcpdump 命令解释
- (4.1.28.6)android httpClient 支持HTTPS的2种处理方式
- (4.1.28.5)Android端支持HTTP和HTTPS
- android-获取网络时间、获取特定时区时间、时间同步
- OkHttp
- HttpClient学习使用(1)
- android 6.0不再提供org.apache.http.*
- Xcode7 使用NSURLSession发送HTTP请求报错[转]
- http协议详解
- 基于 HTML5 的 3D 网络拓扑树呈现
- 网络数据包中继与bridge 区别