nodejs http php,对于Nodejs的Http模块的解析

这篇文章主要介绍了关于对于Nodejs的Http模块的解析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

我们知道传统的HTTP服务器是由Aphche、Nginx、IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,下面通过本文给大家介绍Nodejs的Http模块,需要的的朋友参考下吧

一、http服务器

我们知道传统的HTTP服务器是由Aphche、Nginx、IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,例如:

var http = require("http");

http.createServer(function(req,res) {

res.writeHead(200,{

"content-type":"text/plain"

});

res.write("Hello NodeJs");

res.end();

}).listen(3000);

http模块中封装了一个HTTP服务器和一个简易的HTTP客户端:http.Server()用于创建是一个基于事件的HTTP服务器,而http.request()和http.get()可以作为客户端向HTTP服务器发起请求。在这里使用的createServer()方法返回了一个http.Server对象,text/plain的意思是将文件设置为纯文本格式,浏览器在获取到这种文件时并不会对其进行处理,如果将content-type设置为text/html,浏览器在获取到这种文件时会自动调用HTML的解析器对文件进行相应的处理。另外,也可以用new http.Server()构造函数的方法创建http.Server对象,例如:

var http = require("http");

var server = new http.Server();

server.on("request",function(req,res) {

...

}).listen(3000);

以上代码是通过直接创建一个http.Server对象,然后为其添加request事件监听。使用createServer()方法创建的http.Server对象默认添加了一个request事件监听,但是省略了。

上面说到了http.Server的事件,http.Server最常用的事件是"request",当接收到http请求时触发。在"request"事件中,传入回调函数的参数req和res分别是http.IncomingMessage和http.ServerResponse的实例:

http.IncomingMessage类包含了从客户端发来的http请求信息,它可以用来访问响应状态、消息头、以及数据等,例如:

*headers/ - 请求头或响应头的对象

*httpVersion/ - http协议版本,可能的值有"1.1"或"1.0"

*method/ - 请求的方法,例如"GET"、"POST"等

*statusCode/ - http响应状态码

*statusMessage/ - http响应状态消息

*url/ - 发送http请求的客户端的url

http.ServerResponse类是返回给客户端的信息,它有三个重要的方法,用于返回响应头、响应内容以及结束请求:

writeHead(statusCode[, statusMessage][,headers]):向请求的客户端发送响应头,该函数在一个请求中最多调用一次,如果不调用,则会自动生成一个响应头

write(chunk[,encoding][,callback]):向请求的客户端发送响应内容,chunk是一个buffer或者字符串,如果chunk是字符串,则需要指定编

码方式,默认为utf-8,在end()方法调用之前可以多次调用

end([data][,encoding][,callback]):结束响应,告知客户端所有发送已经结束,如果不调用这个函数,客户端将一直处于等待状态

其他http.Server类的事件可以参考官方文档:http://nodejs.cn/api/http.html

二、http客户端

http模块提供了http.request()和http.get()两个方法,功能是作为客户端向http服务器发起请求。

http.request(options[,callback])方法

http.request()方法返回一个http.ClientRequest的实例。其中,options是一个对象,表示请求的参数。包括:

*protocol/ - 使用的协议,默认为http

*host/ - 请求发送至的服务器的域名或 IP 地址,默认为"localhost"

*hostname/ - host的别名

*port/ - 远程服务器的端口号,默认为80

*method/ - 指定http请求方法,默认为"GET"

*path/ - 请求相对于根的路径,默认是"/",QueryString应该包含在其中。例如:/index.html?page=12

*headers/ - 包含请求头的对象

*timeout/ - 它设置了 socket 等待连接的超时时间

例如:

var http = require("http");

var querystring = require("querystring");

var postData = querystring.stringify({

"content":"测试一下",

"mid":8837

});

var options = {

hostname:"www.imooc.com",

port:80,

path:"/course/document",

method:"POST",

headers:{

"Accept":"application/json, text/javascript, */*; q=0.01",

"Accept-Encoding":"gzip, deflate",

"Accept-Language":"zh-CN,zh;q=0.8",

"Connection":"keep-alive",

"Content-Length":postData.length,

"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",

"Cookie":"",

"Host":"www.imooc.com",

"Origin":"http://www.imooc.com",

"Referer":"http://www.imooc.com/video/8837",

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2763.0 Safari/537.36",

"X-Requested-With":"XMLHttpRequest",

}

}

var req = http.request(options,function(res){

res.on("data",function(chunk){

console.log(chunk);

});

res.on("end",function(){

console.log("完毕!");

});

console.log(res.statusCode);

});

req.on("error",function(err){

console.log(err.message);

})

req.write(postData);

req.end();

如果请求过程中遇到任何错误,则在返回的请求对象中会触发"error"事件;

使用http.request()必须总是调用req.end()来表明请求的结束,即使没有数据被写入主体

http.get(options[,callback])方法

http.get()方法是http.request()方法的简化版,主要区别是http.get()自动将请求方法设为了"GET"请求,同时不需要手动调用req.end()

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值