Node.js之HTTP请求与响应
在C#、OC中也是客户端发起一个请求,服务端作出响应。我们可以把这个过程抽象理解 .
1.客户端给服务端发起请求相当于向服务端写入一个流(writable)
2.服务端读取客户端的流(readable)
3.服务端向客户端作出响应相当于向客户端写入一个流(writable)
4.客户端读取服务端的响应(readable)
整个流程分为两部分一是客户端的处理而是服务端的处理.最主要的还是客户端请求和服务端响应.
一、http.ClientRequest对象
它实现了writable流,可以使用它的所有功能。http模块中使用http.request(options,callback)方法来生成该对象。
1.options主要包括以下几个可选:
host :服务器域名或IP地址,默认localhost
hostname:与host相同,但对url.parse()的支持优于host.
port:端口
localAddress:网络连接的本地接口
socketPath:Unix域套接字(使用host:port或socketPath)
method:请求方法 :GET、POST等默认GET
path:请求的资源路径默认/.也可包括查询字符串
headers:请求头
auth:身份认证
agent:代理.如果使用Agent,则请求默认为Connection:keep-alive.可能的值有undefined,Agent,false
2.ClientRequest提供的事件与方法
事件:
response:当从服务器收到该请求的响应时发出。该回调处理程序接收一个IncomingMessage对象作为唯一的参数。
socket:当一个套接字分配给该请求时发出。
connect:当服务器响应一个由CONNECT方法发起的一个请求时发出。如果该事件未被客户端处理,那么该连接将关闭
upgrade:当服务器响应在其标头包括一个更新请求的请求时发出
continue:当服务器发送一个100ContinueHTTP响应,指示客户端发送请求正文时发出
方法:
write()、end()和writable流一样
abort():终止请求。
setTimeout(timeout,[callback]):设置请求超时时间
setNoDelay([noDelay]):noDelay布尔值,true立即写入,false缓冲写入
setSocketKeepAlive([enable],[initualDelay]):启用和禁用对客户机请求的保持活动功能。initualDelay指定最后一个数据包和第一个保持活动请求之间的延迟。
二、http.ServerResponse对象
和http.ClientRequest对象一个也是实现了writable流。也可实现writable流的功能,另外还包括下面的事件属性和方法。
事件或属性:
close:在Response.End()刷新响应之前关闭时发出。
headersSent:布尔值.已发送为true.只读。
sendDate:布尔值,true时,Date标头自动生成,并作为响应的一部分发送
statusCode:无须显示的写入标头来指定响应状态码。
方法:
writeContinue():发送一个HTTP/1.1 100 Continue消息给客户端,请求被发送的正文内容
writeHead(statusCode,[reasonPhrase],[headers]):把一个响应标头写入请求。statusCode参数是HTTP响应状态代码,reasonPhrase是字符串,表示StatusCode的原因.headers是响应标头对象。response.writeHead(200,'Success',{'Content-Length':body.length,'Content-Type':'text/plain'});
setTimeout(msecs,callback):设置客户端连接的超时时间。
setHeader(name,value):设置标头值。
getHeader(name):获取标头值。
removeHeader(name):移除标头。
addTrailers(headers):将http尾随标头写入响应的结束处。
三、客户端响应和服务端请求
上面一二主要是writable流的,readable流的包括客户端响应和服务端请求。它们都是一个对象:IncomingMessage对象。
IncomingMessage对象长成什么样子可以把它输出来看.由于IncomingMessage对象对于我们开发的来说不经常用,所以看看就好。
var http=require("http")
var options={
hostname:'www.baidu.com',
path:'',
port:'80',
method:'GET'
};
var req=http.request(options,function(response){
console.log(response);
});
req.end();
Node.js之HTTP请求与响应的更多相关文章
- Node.js GET/POST请求
在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器一般都使用GET/POST请求. 我将为大家介绍 Node.js GET/POST请求. 获取GET请求内容 由于G ...
- node.js 发送http 请求
自己研究了一下 node.js 的 http模块 下面为想服务器发送请求的代码 ,通过学习了解http 请求的过程 ,node.js 对http请求的原始封装比较低,以前php 可以用$_GET , ...
- body-parser Node.js(Express) HTTP请求体解析中间件
body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日 781 声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包 ...
- 35.Node.js GET/POST请求
转自:http://www.runoob.com/nodejs/nodejs-module-system.html 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器 ...
- 关于Node.js的httpClieint请求报错ECONNRESET的原因和解决措施
背景说明 最近在工作项目中有下面一个场景: 使用Node.js的express框架实现了一个文件系统服务器端,其中有个API用于客户端上传文件.客户端使用Node.js的HttpClient来调用服务 ...
- node.js搭建代理服务器请求数据
1.引入node.js中的模块 var http = require("http"); var url = require("url"); var qs = r ...
- formidable处理node.js的post请求
前言 我们都知道在node.js中,我们最常用的请求方式是get和post.其中get请求和URL相关,通过解析URL我们可以直接获取到请求的参数.但是post请求不同,post请求是包含在请求体中, ...
- Node.js + Express 接口请求(GET、POST、PUT)事例
路由 路由是指应用程序的端点(URI)如何响应客户端请求.有关路由的介绍,请参阅基本路由. 您可以使用Express app对象的方法定义路由,这些方法对应于HTTP方法; 例如,app.get()处 ...
- node.js处理post请求
1.html 2.app.js var http = require('http') var qs = require('querystring') /** * 路由控制的功能 * @param pa ...
随机推荐
- 在Windows 7上安装Team Foundation Server(TFS)的代理服务器(Agent)
自2009年微软发布Windows 7以来,经过8年的市场验证,Windows 7已经成为史上应用最为广泛的操作系统.但是面对技术变化的日新月异,2015年微软正式停止了对Windows 7的主流支持 ...
- javascript中的with关键字
说起js中的with关键字,很多小伙伴们的第一印象可能就是with关键字的作用在于改变作用域,然后最关键的一点是不推荐使用with关键字.听到不推荐with关键字后,我们很多人都会忽略掉with关键字 ...
- CefSharp禁止弹出新窗体,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
1.实现ILifeSpanHandler接口,代码如下: using CefSharp; using CefSharp.WinForms; using System; using System.Col ...
- 深入浅出“跨视图粒度计算”--3、EXCLUDE表达式
本文由 网易云发布. 深入嵌入“跨视图粒度计算”的前面两篇分别讲了 1.理解数据的粒度 2.INCLUDE表达式 这一篇讲一下EXCLUDE表达式的用法. EXCLUDE,中文译为“排除”,顾名思义 ...
- day 23 面向对象的命名空间与组合
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 1. 静态属性就是直接在类中定义的变量 2.动态属性就是定义在类中的方法. 其 ...
- Android Studio - Unable to create Debug Bridge: Unable to start adb server: adb server version (32) doesn't match this client (40)
错误提示:Unable to create Debug Bridge: Unable to start adb server: adb server version (32) doesn't matc ...
- django模型中, 外键字段使用to_filed属性 指定到所关联主表的某个字段
在django项目的开发过程中,在设计模型时一开始将主键设置成了一个自定义的字段,但是在创建搜索索引时却发现必须要存在一个id的字段,并且为主键(不知道是否是项目一开始就这样配置的原因), 但此时表结 ...
- 频繁项集挖掘之apriori和fp-growth
Apriori和fp-growth是频繁项集(frequent itemset mining)挖掘中的两个经典算法,虽然都是十几年前的,但是理解这两个算法对数据挖掘和学习算法都有很大好处.在理解这两个 ...
- Web端测试和移动端测试
之前参加的项目有涉及Web端测试和移动端测试,简单的记录下他们之间的区别: 1.记录bug 在Web端可以通过系统自带的截图和QQ截图等方式来截取bug的图片,对于错误的地方可以用工具自带的标识来 ...
- 【loj6437】 【PKUSC2018】 PKUSC 计算几何
题目大意:给你一个m个点的简单多边形.对于每个点i∈[1,n],作一个以O点为原点且过点i的圆,求该圆在多边形内的圆弧长度/圆长. 其中n≤200,m≤500. 我们将n个点分开处理. 首先,我们要判 ...