深入浅析Nodejs的Http模块
发布时间 - 2026-01-11 01:58:16 点击率:次一、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/<object> - 请求头或响应头的对象 *httpVersion/<string> - http协议版本,可能的值有"1.1"或"1.0" *method/<string> - 请求的方法,例如"GET"、"POST"等 *statusCode/<number> - http响应状态码 *statusMessage/<string> - http响应状态消息 *url/<string> - 发送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/<string> - 使用的协议,默认为http *host/<string> - 请求发送至的服务器的域名或 IP 地址,默认为"localhost" *hostname/<string> - host的别名 *port/<number> - 远程服务器的端口号,默认为80 *method/<string> - 指定http请求方法,默认为"GET" *path/<string> - 请求相对于根的路径,默认是"/",QueryString应该包含在其中。例如:/index.html?page=12 *headers/<object> - 包含请求头的对象 *timeout/<number> - 它设置了 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()
以上所述是小编给大家介绍的Nodejs的Http模块,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# nodejs
# 的http
# 模块
# NodeJS学习笔记之FS文件模块
# 详解nodeJs文件系统(fs)与流(stream)
# 详解nodejs 文本操作模块-fs模块(一)
# NodeJS学习笔记之Http模块
# Node.js中HTTP模块与事件模块详解
# Node.js中路径处理模块path详解
# 详解nodeJS之路径PATH模块
# 深入理解node.js之path模块
# node.js中path路径模块的使用方法实例分析
# 客户端
# 是一个
# 默认为
# 设置为
# 小编
# 在这里
# 最多
# 在此
# 不需要
# 是由
# 可以用
# 给大家
# 会对
# 为其
# 它可以
# 相对于
# 则在
# 装了
# 则会
# 所述
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
WEB开发之注册页面验证码倒计时代码的实现
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
制作公司内部网站有哪些,内网如何建网站?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何在IIS7上新建站点并设置安全权限?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
长沙做网站要多少钱,长沙国安网络怎么样?
大型企业网站制作流程,做网站需要注册公司吗?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何在阿里云虚拟服务器快速搭建网站?
如何在阿里云部署织梦网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何在Windows服务器上快速搭建网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
再谈Python中的字符串与字符编码(推荐)
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Bootstrap整体框架之JavaScript插件架构
UC浏览器如何设置启动页 UC浏览器启动页设置方法
如何快速搭建高效简练网站?
简历在线制作网站免费版,如何创建个人简历?
如何在腾讯云服务器快速搭建个人网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何快速使用云服务器搭建个人网站?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
香港网站服务器数量如何影响SEO优化效果?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
教学论文网站制作软件有哪些,写论文用什么软件
?
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
PythonWeb开发入门教程_Flask快速构建Web应用
利用JavaScript实现拖拽改变元素大小
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
手机软键盘弹出时影响布局的解决方法
Laravel如何创建自定义Artisan命令?(代码示例)
Python正则表达式进阶教程_复杂匹配与分组替换解析
jQuery validate插件功能与用法详解
英语简历制作免费网站推荐,如何将简历翻译成英文?
微信小程序 input输入框控件详解及实例(多种示例)
魔方云NAT建站如何实现端口转发?
如何在建站宝盒中设置产品搜索功能?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
中山网站制作网页,中山新生登记系统登记流程?
上一篇:探索未来科技,阿里巴巴云启新篇
上一篇:探索未来科技,阿里巴巴云启新篇

