在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请求与响应的更多相关文章

  1. Node.js GET/POST请求

    在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器一般都使用GET/POST请求. 我将为大家介绍 Node.js GET/POST请求. 获取GET请求内容 由于G ...

  2. node.js 发送http 请求

    自己研究了一下 node.js 的 http模块  下面为想服务器发送请求的代码 ,通过学习了解http 请求的过程 ,node.js 对http请求的原始封装比较低,以前php 可以用$_GET , ...

  3. body-parser Node.js(Express) HTTP请求体解析中间件

    body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包 ...

  4. 35.Node.js GET/POST请求

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器 ...

  5. 关于Node.js的httpClieint请求报错ECONNRESET的原因和解决措施

    背景说明 最近在工作项目中有下面一个场景: 使用Node.js的express框架实现了一个文件系统服务器端,其中有个API用于客户端上传文件.客户端使用Node.js的HttpClient来调用服务 ...

  6. node.js搭建代理服务器请求数据

    1.引入node.js中的模块 var http = require("http"); var url = require("url"); var qs = r ...

  7. formidable处理node.js的post请求

    前言 我们都知道在node.js中,我们最常用的请求方式是get和post.其中get请求和URL相关,通过解析URL我们可以直接获取到请求的参数.但是post请求不同,post请求是包含在请求体中, ...

  8. Node.js + Express 接口请求(GET、POST、PUT)事例

    路由 路由是指应用程序的端点(URI)如何响应客户端请求.有关路由的介绍,请参阅基本路由. 您可以使用Express app对象的方法定义路由,这些方法对应于HTTP方法; 例如,app.get()处 ...

  9. node.js处理post请求

    1.html 2.app.js var http = require('http') var qs = require('querystring') /** * 路由控制的功能 * @param pa ...

随机推荐

  1. DBCC--SQLPERF

    ​提供所有数据库的事务日志空间使用情况统计信息.也可以用于重置等待和闩锁的统计信息. 语法: DBCC SQLPERF ( [ LOGSPACE ] | [ "sys.dm_os_latch ...

  2. ASP.NET关于Session_End触发与否的问题

    项目背景: 要求开发一个篆文识别网站,由于之前做好了WinForm的,把系统直接移植到WebForm上就好.工作比较简单,但确实遇到不少问题. 核心问题是: 篆文识别涉及到用户对原始图片的预处理(例如 ...

  3. char、varchar、nchar、nvarchar特点比较

    于程序中的string型字段,SQLServer中有char.varchar.nchar.nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这 ...

  4. 20181015记录一个简单的TXT日志类

    20190422添加换行以及时间记录 using System; using System.Collections.Generic; using System.IO; using System.Lin ...

  5. Extjs文件上传问题总结

    本来文件上传是一个简单而常用的功能,但是,由于刚刚接触extjs,对extjs中的控件及其使用方法并不熟悉,导致本来一个很快就可以搞定的文件上传问题,弄了将近两天的时间.现将问题及解决办法发出来,供有 ...

  6. python3字符集之间--encode与decode之间的转码详解

    encode是编码,里面传入的参数是需要转成的字符集,decode是解码,里面传入的参数是本身的字符集,用本身的字符集解码为unicode字符集再转码 字符集之间的爱恨纠缠 # -*- coding: ...

  7. jzoj5805

    #include<bits/stdc++.h> using namespace std; int x,n,pp,ct[10000]; long double f[210][(1<&l ...

  8. FunDA(6)- Reactive Streams:Play with Iteratees、Enumerator and Enumeratees

    在上一节我们介绍了Iteratee.它的功能是消耗从一些数据源推送过来的数据元素,不同的数据消耗方式代表了不同功能的Iteratee.所谓的数据源就是我们这节要讨论的Enumerator.Enumer ...

  9. Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除

    本文作者:X_Al3r Prat 0 自白 每一天都是新的一天.没啥吐槽的,步入正题 /system/category.php 文件一处Sql注入## 80-87行代码         $root_i ...

  10. Xshell连接不上虚拟机Linux系统

    以下是我在尝试网上各种办法之后总结的最优解决办法: 1.先在主机上检查虚拟机相关的必要的服务是否都已经启动 2.检查虚拟机系统防火墙是否处于关闭状态 3.检查虚拟机系统的ssh服务是否已经启动 4.检 ...