概念:Node.js提供了http模块。其中封装了一个高效的HTTP服务器和一个建议的HTTP客户端。
   http.server是一个基于事件的HTTP服务器。内部有C++实现。接口由JavaScript封装。
            http.request则是一个HTTP客户端工具。用户向服务器发送请求。

一、HTTP服务器

http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口
app.js案例
//引入模块
var http=require('http')
//创建服务
var server=http.createServer(function(req,res){//相当于action都在这里定义//响应头res.writeHead(200,{'Content-Type':'text/html'});//相应内容res.write('<h1>Node.js</h1>');//结束响应res.end('<p>PCAT</p>');
//监听端口
})
server.listen(3000);
server.on('close',function(){console.log('server is close');
})
console.log('HTTP server is listening at port 3000.');

代码分析:
http.createServer创建了一个http.Server的实例,将一个函数作为HTTP请求处理函数。这个函数接受两个参数,请求对象req和相应对象的res。res显式写入了响应代码200(表示请求成功),指定相应头,写入响应体。调用end结束并发送。该实例调用listen函数,启动服务器并监听3000端口。

1.http.Server的事件

http.Server是一个基于事件的HTTP服务器,所有请求都被封装到独立的事件,开发者只要对它的事件编写相应函数可实现HTTP服务器的所有功能,它继承与EventEmitter,提供了以下事件:
   request:当客户端请求到来时,该事件被触发,提供两个参数req和res,分别是http.ServerRequest和http.ServerResponse的实例,表示请求和响应信息。
connection:当TCP连接建立时,该事件被触发,提供一个参数socket,为net.Socket的实例(底层协议对象)。
close:当服务器关闭时,该事件被触发。
除此之外还有checkContinue、upgrade、clientError事件。
最常用和关心的是:request事件,http提供了一个捷径,http.createServer([requestListener])
显式实现方法:
案例:server.js
var http=require('http');
var server=new http.Server();
server.on('request',function(req,res){res.writeHead(200,{'Content-Type':'text/html'});res.write('<h1>we are pcat</h1>');res.end("<p>I'm marico.</p>");
});
server.listen(3000);

2.http.ServerRequest请求的信息

此对象是后端开发者最关注的内容,它一般由http.Server的request事件发送,作为第一个参数传递,通常简写成request或req。
HTTP请求分为两部分:请求头和请求体。,请求内容短的直接在请求头解析完成后立即读取,而请求体可能相对较长,需要一定的时间传输,因此提供了3个事件用于控制请求体传输。
   (1)data:当请求体数据到来时,该事件被触发,该事件一共一个参数chunk,表示接受到的数据。
                (2)end:当请求体数据传输完成时,该事件被触发,此后将不会再有数据到来。
(3)close:用户当前请求结束时,该事件被触发,不同于end,如果用户强制终止了传输,也会触发close
ServerReuqest的属性
complete:客户端请求是否已经发送完成
httpVersion    HTTP协议版本,通常是1.0或1.1
method        HTTP请求方法,如:GET,POST
url                原始的请求路径,例如/pc/getUser或/user?name=marico
headers       HTTP请求头
trailers       HTTP请求尾(不常见)
connection              当前HTTP连接套接字,为net.Socket的实例
socket                   connection属性的别名
client            client属性的别名

3.获取GET请求内容

由于GET请求直接被嵌入在路径中,URL完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET的参数,Nodejs的url模块中的parse函数提供了这个功能
案例:get.js
//引入模块
var http=require('http');
var urls=require('url');
var util=require('util');
//创建服务
http.createServer(function(req,res){res.writeHead(200,{'Content-Type':'text/plain'});//解析并打成字符串形式返回给客户端res.end(util.inspect(urls.parse(req.url,true)));
}).listen(3000);

4.获取POST请求内容

POST请求的内容全部都在请求体中,http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。譬如上传文件。恶意的POST请求会大大消耗服务器的资源。所以Nodejs是不会解析请求体,当你需要的时候,需要手动来做。
post.js
var http=require('http');
var querystring=require('querystring');
var util=require('util');
http.createServer(function(req,res){var post='技术共享CSDN';//注册data事件监听函数,每当接受请求体的数据req.on('data',function(chunk){post+=chunk;});req.on('end',function(){//解析成真正的post为真正的post请求格式//相当于Ext.decode()post=querystring.parse(post);//向前端返回res.end(util.inspect(post));});
}).listen(3000);

5.http.ServerResponse返回给客户端的信息

决定了用户最终能到的结果,它是由http.Server的request事件发送的,作为第二个参数传递。一般为response或res
主要的三个函数:
response.writeHead(statusCode,[headers]):向请求的客户端发送响应头。
statusCode是HTTP的状态码,如200为成功,404未找到等。
headers是一个类似关联数组的对象,表示响应头的每个属性。
response.write(data,[encoding]) 向请求客户端发送相应内容,data是buffer或字符串,encoding为编码
response.end([data],[encoding]) 结束响应,告知用户所有发送已经完成,当所有要返回的内容发送完毕,该函数必须被调用一次,如果不调用,客户端永远处于等待状态

node.js详解Http服务器相关推荐

  1. node.js 详解

    目录 一. 初始node.js 1.为什么 JavaScript 可以在浏览器中被执行? 2. node.js 简介 3. node.js 查看是否安装 4. 运行文件 (1).在终端中输入 :nod ...

  2. Node.js详解(二):Node.js与JS的关系

    一.简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP.Py ...

  3. Node.js详解(四):连接MongoDB

    文章目录 一.安装MongoDB访问驱动 二.连接数据库 三.添加数据 四.添加多条数据 五.修改数据 六.查询数据 1.查询单条记录 2.查询多条记录 七.删除数据 八.完整示例代码 1.路由 Ap ...

  4. Grunt学习笔记002---Gruntfile.js详解

    Gruntfile.js详解 使用yeomen新建一个项目,里面会自动帮你创建一个完整项目的全部目录,这里针对新建出来的Gruntfile.js做一下简单说明,用作以后参考使用,由于还是菜鸟,很多东西 ...

  5. 从零开始搭建Node.js, Express, Ejs, Mongodb服务器

    http://www.toolmao.com/nodejs-express-ejs-mongodb-server 本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Ex ...

  6. 服务器给站点读写权限,IIS7目录权限设置的问题详解Windows服务器操作系统 -电脑资料...

    今天自己把服务器安装了windows 2008同时也是iis7了,但是在设置权限时有些小问题不了解后来百度了才知道解决办法, 前段时间在windows server 2008 r2 (x64)服务器上 ...

  7. xp系统本地服务器环境配置,Windows XP安装Apache环境图文详解Windows服务器操作系统 -电脑资料...

    本文章来简单的介绍Windows XP安装Apache环境图文方法,有需要了解的朋友可参考参考, 双击 apache_2.2.8-win32-x86-no_ssl.msi 文件,开始安装 Apache ...

  8. Cocos2d之Node类详解之节点树(二)

    一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node ...

  9. #史上最详解# IIS服务器查看log日志

    windows IIS 目前有两个版本 IIS6.0,与IIS7.5,不同版本默认的日志位置与日志设置均有差别 https://blog.csdn.net/mystonelxj/article/det ...

最新文章

  1. 数十篇推荐系统论文被批无法复现:源码、数据集均缺失,性能难达预期
  2. 启动和退出mysql的三种方法_Oracle数据库几种启动和关闭方式
  3. 使用git上传代码到github远程仓库
  4. 互联网公司的项目经理:客户伤不起
  5. three.js之正投影摄像机与透视投影摄像机的区别
  6. J2EE如何生成验证码图片和点击刷新验证码
  7. Eclipse中java文件头注释格式设置
  8. 游戏开发之C++异常(C++)
  9. 圆角进度条,带数字居中显示的圆角进度条
  10. linux 批量修改文件后缀名
  11. 怎么用计算机算化学,化学计算机
  12. 计算机丢失opencv_world300.dll文件
  13. 怎样进行https证书检查
  14. SQL查询中文字符及标点符号
  15. android系统优化排行,性能最强的10大安卓手机排行,你用的排第几?
  16. Gradle编译生成不同的版本,动态设定应用标题 / 应用图标 / 替换常量
  17. wps的流程图怎么导出_word流程图-WPS绘制流程图的正确打开方式,超级简单
  18. 10条SKETCH的秘诀,为你提高工作的效率
  19. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(五)---合宙Air724UG 4G cat.1硬件设计开源
  20. PLC编程安卓版 兼容三菱FX PLC编程指令 软件在线仿真 硬件PLC工控板蓝牙与手机蓝牙在线下载程序 在线仿真

热门文章

  1. IOC操作Bean管理注解方式(组件扫描配置)
  2. mo汇编指令_汇编指令大全
  3. pyautogui typewrite_解放双手:Pyautogui帮你work
  4. java get properties_Java.lang.System之getProperties()方法
  5. 三农电子商务创业创新大赛作品_全国大学生电子商务“创新、创意及创业”挑战赛五邑大学校赛...
  6. 我精心珍藏的Python代码技巧
  7. myeclipse怎么创建jframe类_创建型-建造者模式
  8. cpu频率_新版win10修复CPU频率显示不正确的bug
  9. k8s管理java项目_Kubernetes集群部署项目-部署Java项目(推送镜像
  10. linux mpeg-4,嵌入式MPEG-4解码系统的设计与实现,嵌入式MPEG-4解码系统,嵌入式Linux,视频码流,P...