博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nj11--http
阅读量:6515 次
发布时间:2019-06-24

本文共 3494 字,大约阅读时间需要 11 分钟。

概念:Node.js提供了http模块。其中封装了一个高效的HTTP服务器和一个建议的HTTP客户端。http.server是一个基于事件的HTTP服务器。内部有C++实现。接口由JavaScript封装。http.request则是一个HTTP客户端工具。用户向服务器发送请求。一、HTTP服务器http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口前面讲解的app.js案例代码分析: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.js2.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.1method        HTTP请求方法,如:GET,POSTurl                原始的请求路径,例如/pc/getUser或/user?name=maricoheaders       HTTP请求头trailers       HTTP请求尾(不常见)connection              当前HTTP连接套接字,为net.Socket的实例socket                   connection属性的别名client            client属性的别名3.获取GET请求内容由于GET请求直接被嵌入在路径中,URL完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET的参数,Nodejs的url模块中的parse函数提供了这个功能案例:get.js4.获取POST请求内容POST请求的内容全部都在请求体中,http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。譬如上传文件。恶意的POST请求会大大消耗服务器的资源。所以Nodejs是不会解析请求体,当你需要的时候,需要手动来做。post.js5.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]) 结束响应,告知用户所有发送已经完成,当所有要返回的内容发送完毕,该函数必须被调用一次,如果不调用,客户端永远处于等待状态
var http=require('http');var server=new http.Server();server.on('request',function(req,res){
//事件触发 res.writeHead(200,{'Content-Type':'text/html'}); res.write('

we are pcat

'); res.end("

I'm marico.

");});server.listen(3000);
//引入模块var http=require('http')//创建服务var server=http.createServer(function(req,res){    //相当于action都在这里定义    //响应头    res.writeHead(200,{'Content-Type':'text/html'});    //相应内容    res.write('

Node.js

'); //结束响应 res.end('

PCAT

');//监听端口})server.listen(3000);server.on('close',function(){ console.log('server is close');})console.log('HTTP server is listening at port 3000.');
//引入模块var http=require('http');var urls=require('url');var util=require('util');//创建服务http.createServer(function(req,res){
//get方式 res.writeHead(200,{'Content-Type':'text/plain'}); //解析并打成字符串形式返回给客户端 res.end(util.inspect(urls.parse(req.url,true)));}).listen(3000);
var http=require('http');var querystring=require('querystring');var util=require('util');http.createServer(function(req,res){
//post方式 var post=''; //注册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);

 

转载地址:http://byofo.baihongyu.com/

你可能感兴趣的文章
tengine配置支持http2
查看>>
Xmanager连接linux服务器图形界面
查看>>
html 打开摄像头操作_转
查看>>
iSCSI之基于用户的认证及基于配置文件创建iSCSI
查看>>
ELK6.5 Nginx 日志搜集-03 kibana 安装
查看>>
Java的new内存机制
查看>>
OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测
查看>>
懒惰、急躁和傲慢(Laziness, Impatience and hubris)
查看>>
解决Handler发送消息时:this message is already in use
查看>>
第一章实验(一):搭建web服务器
查看>>
Microsoft Virsual 获取设备列表
查看>>
阿里巴巴Dubbo实现的源码分析
查看>>
【源资讯 第27期】Java 热度下降?新版本难产! Google 研发新操作系统
查看>>
web.xml配置详解
查看>>
利用js做rem设置
查看>>
js页内查找
查看>>
专家:人工智能可能劫持人机界面
查看>>
[置顶] IT职场法则七条——献给正在努力奋斗的你们
查看>>
一个C++程序
查看>>
T001_QTP之对象库
查看>>