Node中http模块详解(服务端篇)
来源:互联网 发布:mac升级中解压软件损坏 编辑:程序博客网 时间:2024/05/16 16:05
转自:http://blog.csdn.net/woshinannan741/article/details/51357464
Node中的Http
Node中提供了http模块,其中封装了高效的http服务器和http客户端
http.server是一个基于事件的HTTP服务器,内部是由c++实现的,接口由JavaScript封装
http.request是一个HTTP客户端工具。用户向服务器发送数据。
下面就来分别得介绍一下http的服务端和客户端
一、HTTP服务器
http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口,就像在前面的文章《Node入门必须知道的事情》中创建的服务器一样是特别的简单的。
下面分别来讲一个有关http服务器的几个事件
1.http.server事件
http.server是一个基于事件的HTTP服务器,所有的请求都被封装到独立的事件当中,我们只需要对他的事件编写相应的行数就可以实现HTTP服务器的所有功能,它继承自EventEmitter
,提供了以下的事件:
1. request:当客户端请求到来的时候,该事件被触发,提供两个参数request
和response
,分别是http.ServerRequest
和http.ServerResponse
表示请求和响应的信息。
2. connection:当TCP建立连接的时候,该事件被触发,提供了一个参数socket
,为net.socket
的实例(底层协议对象)
3. close:当服务器关闭的时候会被触发
4. 除此之外还有checkContinue、upgrade、clientError等事件
我们最常用的还是request
事件,http也给这个事件提供了一个捷径:http.createServer([requestListener])
下面我们来简单的看一下两个案例:
第一个是使用request
事件的:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
下面的案例使用http的给的捷径http.createServer
制作的代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2.http.ServerRequset请求信息
我们都知道HTTP请求分为两部分:请求头
和请求体
,如果请求的内容少的话就直接在请求头协议完成之后立即读取,请求体可能相对较长一点,需要一定的时间传输。因此提供了三个事件用于控制请求体传输
.
(1)data:当请求体数据到来时,该事件被触发,该事件一共一个参数chunk,表示接受到的数据。
(2)end:当请求体数据传输完成时,该事件被触发,此后将不会再有数据到来。
(3)close:用户当前请求结束时,该事件被触发,不同于end,如果用户强制终止了传输,也会触发close ServerRequest
的属性
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3.获取GET请求内容
由于GET请求直接被嵌入在路径中,URL完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET的参数,Nodejs的url模块中的parse函数提供了这个功能
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
4.获得POST请求内容
POST请求的内容全部都在请求体中,http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。譬如上传文件。恶意的POST请求会大大消耗服务器的资源。所以Nodejs是不会解析请求体,当你需要的时候,需要手动来做。
简单的看一下代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
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中http模块详解(服务端篇)
- Node中http模块详解(服务端篇)
- Node中http模块详解(服务端篇)
- Node中http模块详解(客户端篇)
- node中http模块基础知识
- Node.js知识点详解(二)HTTP模块与事件模块
- Node.js12 Http模块
- Node.js HTTP模块
- Node Http模块
- 【Node核心模块HTTP】
- Node.Js http模块(一)-发送http请求实例
- Node模块详解
- node模块详解
- Node:Q与node http模块搭配
- Node.js 的 http 模块
- Node.js中的HTTP模块
- node http模块学习笔记
- node.js的http模块
- 剑指Offer--5.用两个栈实现队列
- 剑指offer之一---二维数组中的查找
- 垃圾收集算法对比
- POJ 1743:后缀数组求 不重叠最长重复子串
- Java实现二叉树的前序、中序、后序以及层次遍历
- Node中http模块详解(服务端篇)
- 变量名命名
- 大数据预科班9
- 【Unity3D】导入FBX模型使用Legacy动画的Scale缩放问题
- gcc编译流程&存储布局&位运算
- 逻辑回归与梯度下降
- 面试系列-HashTable与HashMap的区别
- 3. Longest Substring Without Repeating Characters
- 原码-反码-补码 --数学公式分析