深入浅析Nodejs的Http模块
前端之家收集整理的这篇文章主要介绍了
深入浅析Nodejs的Http模块,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_4040@一、http服务器
@H
404_0@ 我们知道传统的HTTP服务器是由Aphche、
Nginx、IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,例如:
<div class="jb51code">
<pre class="brush:js;">
var http = require("http");
http.createServer(function(req,res) {
res.writeHead(200,{
"content-type":"text/plain"
});
res.write("Hello NodeJs");
res.end();
}).listen(3000);
@H_
404_0@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对象,例如:
@H_
404_0@以上
代码是通过直接创建一个http.Server对象,然后为其
添加request事件监听。使用createServer()
方法创建的http.Server对象默认
添加了一个request事件监听,但是省略了。
@H_
404_0@上面说到了http.Server的事件,http.Server最常用的事件是"request",当接收到http请求时触发。在"request"事件中,传入回调
函数的参数req和res分别是http.IncomingMessage和http.ServerResponse的实例:
@H_
404_0@http.IncomingMessage类包含了从客户端发来的http请求信息,它可以用来访问响应状态、消息头、以及数据等,例如:
- 请求头或响应头的对象
*httpVersion/
- http协议版本,可能的值有"1.1"或"1.0"
*method/ - 请求的方法,例如"GET"、"POST"等
*statusCode/ - http响应状态码
*statusMessage/ - http响应状态消息
*url/ - 发送http请求的客户端的url
@H_
404_0@http.ServerResponse类是返回给客户端的信息,它有三个重要的
方法,用于返回响应头、响应
内容以及结束请求:
@H_
404_0@writeHead(statusCode[,statusMessage][,headers]):向请求的客户端发送响应头,该
函数在一个请求中最多
调用一次,如果不
调用,则会
自动生成一个响应头
@H_
404_0@write(chunk[,encoding][,callback]):向请求的客户端发送响应
内容,chunk是一个buffer或者字符串,如果chunk是字符串,则需要指定编
@H_
404_0@码方式,默认为utf-8,在end()
方法调用之前可以多次
调用
@H_
404_0@end([data][,callback]):结束响应,告知客户端所有发送已经结束,如果不
调用这个
函数,客户端将一直处于等待状态
@H_
404_0@其他http.Server类的事件可以参考官方文档:
nofollow" href="http://nodejs.cn/api/http.html">http://nodejs.cn/api/http.html
@H_
404_0@
二、http客户端
@H_
404_0@http模块提供了http.request()和http.get()两个
方法,
功能是作为客户端向http服务器发起请求。
方法
http.request()
方法返回一个http.ClientRequest的实例。其中,options是一个对象,表示请求的参数。
包括:
*protocol/
- 使用的协议,默认为http
*host/ - 请求发送至的服务器的域名或 IP 地址,默认为"localhost"
*hostname/ - host的别名
*port/ - 远程服务器的端口号,默认为80
*method/ - 指定http请求方法,默认为"GET"
*path/ - 请求相对于根的路径,默认是"/",QueryString应该包含在其中。例如:/index.html?page=12
*headers/
@H_
404_0@例如:
@H_
404_0@如果请求过程中遇到任何
错误,则在返回的请求对象中会触发"error"事件;
@H_
404_0@使用http.request()必须总是
调用req.end()来表明请求的结束,即使没有数据被写入主体
@H_
404_0@http.get(options[,callback])
方法
@H_
404_0@http.get()
方法是http.request()
方法的简化版,主要区别是http.get()
自动将请求
方法设为了"GET"请求,同时不需要手动
调用req.end()
@H_
404_0@以上所述是小编给大家介绍的Nodejs的Http模块。编程之家 jb51.cc 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可
分享给好友!感谢
支持。