全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入浅析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/<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路径模块的使用方法实例分析  # 客户端  # 是一个  # 默认为  # 设置为  # 小编  # 在这里  # 最多  # 在此  # 不需要  # 是由  # 可以用  # 给大家  # 会对  # 为其  # 它可以  # 相对于  # 则在  # 装了  # 则会  # 所述 


相关文章: 济南专业网站制作公司,济南信息工程学校怎么样?  网站制作话术技巧,网站推广做的好怎么话术?  Swift开发中switch语句值绑定模式  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何彻底卸载建站之星软件?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  小型网站建站如何选择虚拟主机?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  ,网页ppt怎么弄成自己的ppt?  如何在云指建站中生成FTP站点?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  大连网站设计制作招聘信息,大连投诉网站有哪些?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  存储型VPS适合搭建中小型网站吗?  简单实现Android验证码  家庭建站与云服务器建站,如何选择更优?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  常州企业网站制作公司,全国继续教育网怎么登录?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  c# await 一个已经完成的Task会发生什么  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  香港服务器选型指南:免备案配置与高效建站方案解析  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  建站之星伪静态规则如何正确配置?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  建站之星展会模版如何一键下载生成?  如何在阿里云香港服务器快速搭建网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  建站之星备案流程有哪些注意事项?  开封网站制作公司,网络用语开封是什么意思?  如何基于云服务器快速搭建个人网站?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在IIS中新建站点并解决端口绑定冲突?  图册素材网站设计制作软件,图册的导出方式有几种?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  股票网站制作软件,网上股票怎么开户?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  中山网站推广排名,中山信息港登录入口?  建站之星后台密码遗忘?如何快速找回?  如何用西部建站助手快速创建专业网站?  建站主机类型有哪些?如何正确选型  如何通过PHP快速构建高效问答网站功能?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  网页设计与网站制作内容,怎样注册网站?  建站与域名管理如何高效结合?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  如何用PHP工具快速搭建高效网站?  建站之星与建站宝盒如何选择最佳方案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。