Http模块

Posted Beat Yourself

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Http模块相关的知识,希望对你有一定的参考价值。

一、http对象的属性和方法

  1、http.STATUS_CODES  //A collection of all the standard HTTP response status codes, and the short description of each

  2、http.METHODS  //A list of the HTTP methods that are supported by the parser.

  3、http.get(options[, callback])  //封装了的http.request()方法,实现了req.end()方法,源码如下:

exports.get = function(options, cb) {
  var req = exports.request(options, cb);
  req.end();
  return req;
};

  4、http.globalAgent  //超全局的代理实例,是http客户端的默认请求。

  5、http.request(options[, callback])  //返回一个http.ClientRequest对象。options可以是一个对象或一个字符串。如果options是一个字符 串, 它将自动使用url.parse()解析。使用http.request()方法时都必须总是调用req.end()以表明这个请求已经完成,即使响应body里没有任何数据。如果在请求期间发生错误(DNS解析、TCP级别的错误或实际HTTP解析错误

),在返回的请求对象会触发一个‘error‘事件。

  有一些特殊的标题应该注意:

  • 发送 ‘Connection: keep-alive‘将会告知Node保持连接直到下一个请求发送
  • 发送 ‘Content-length‘ 头将会禁用默认的 chunked 编码
  • 发送 ‘Expect‘报头会立即发送请求报头. 通常当发送 ‘Expect: 100-continue‘时,你会同时发送一个超时和监听继续的事件。 查看 RFC2616 第 8.2.3 章节获得更多信息
  • 发送一个授权报头将会覆盖使用 auth 选项来完成基本授权

二、http.ClientRequest类

  1、实现方式:http.request(options,callback)||http.request.get(options,callback)  //处理服务器返回的响应时调用callback函数  回调函数的唯一参数是IncomingMessage对象

  2、该对象实现了Writeable流

  3、创建ClientRequest对象时,可以指定的options选项

 选项  说明
 host  请求发往的服务器的域名或IP地址,默认为localhost
 hostname  与host相同,但对url.parse()的支持优于host
 port  远程服务器的端口。默认为80
 localAddres  网络连接绑定的本地接口
 socketPath  Unix域套接字
 method  指定HTTP请求方法的字符串。
 path  指定所请求的资源路径的字符串
 headers  包含请求标头的对象
 auth  基本身份验证
 agent  Agent行为的定义。若使用Agent,默认请求为:Connection:keep-alive.可能的值为:undefined(默认值,使用全局Agent),Agent(使用特定的Agent对象),false(禁用Agent行为)

  4、ClientRequest对象提供的事件

 abort 仅仅在第一次调用 abort()时触发  function () { }
 checkExpectation 每次请求异常时触发  function (request, response) { }
 connect  每当服务器响应一个由CONNECT方法发起的一个请求时发出,如果改事件未由客户端处理,那么该连接将被关闭  function (response, socket, head) { }
 continue  当服务器发送一个100 Continue HTTP响应,指示客户端发送请求正文时发出  function () { }
 response  当从服务器收到该请求的响应时发出  function (response) { }
 socket  当一个套接字被分配给该请求时发出  function (socket) { }
 upgrade  当服务器响应在其标头包括一个更新的请求时发出  function (response, socket, head) { }

   5、ClientRequest对象的方法

  • request.abort():终止当前请求
  • request.end([data][, encoding][, callback]):把可选的数据写入请求正文,然后刷新Writeable流并终止该请求
  • request.flushHeaders():刷新请求头
  • request.setNoDelay([noDelay]):禁用在发送数据之前缓冲数据的Node算法
  • request.setSocketKeepAlive([enable][, initialDelay]):启用和禁用客户机请求的保持活动功能
  • request.setTimeout(timeout[, callback]):为轻汽油设置套接字超时时间
  • request.write(chunk[, encoding][, callback]):把一个正文数据块写入请求。

三、http.ServerResponse对象

  1、描述:这是一个由HTTP服务器内部创建的对象(不是由用户自行创建)。它将作为第二个参数传递到‘request‘事件中。

  2、ServerResponse对象提供的事件

事件名称  事件描述
 close  当客户端的连接在发送Response.end()来完成并刷新响应之前关闭时发出  需要注意的是,底层链接在response.end()被调用或可以冲洗掉之前就被终结了
finish

当响应小心发送后触发.尤其是,当最后部分的响应消息已经被转换在操作系统通过传输在网络上,该事件被触发,这并不意味着客户端已经收到任何东西。

触发该事件后,不会有其他响应对象的事件被触发

  3、ServerResponse对象的方法和属性

方法或属性  说明
 response.addTrailers(headers)  将HTTP尾随标头写入响应的结束处
 response.end([data][, encoding][, callback])  将可选的数据输出写入响应的正文,然后刷新Writeable流并完成响应
 response.finished  默认为false,调用end方法后结果为true
 response.getHeader(name)  获取已在响应中设置的HTTP标头的值
 response.headersSent  如果标头已被发送,为true;否则为false
 response.removeHeader(name)  移除已在响应中设置的一个HTTP标头
 response.sendDate  如果设置为true,则Data标头的是自动生成的,并作为响应的一部分发送
 response.setHeader(name, value)  设置一个特定的标头值
response.setTimeout(msecs, callback) 设置客户端连接的套接字超时时间,以毫秒计,带有一个如果发生超时将被执行的回调函数
response.statusCode 让你无需显式的写入标头来指定响应状态吗
response.statusMessage 这个属性控制着发送到客户端的状态码信息客户端标头刷新时
response.write(chunk[, encoding][, callback]) 将chunk对象到响应Writeable流。这仅把数据写入响应的正文部分。默认编码为utf-8。如果数据被成功写入,返回true
response.writeContinue() Sends a HTTP/1.1 100 Continue message to the client, indicating that the request body should be sen
response.writeHead(statusCode[, statusMessage][, headers]) 把一个响应标头写入请求。

 四、http.IncomingMessage对象

  1、事件:

  • close:当底层套接字被关闭时发出

  2、方法和属性

  • message.destroy([error]):If error is provided, an ‘error‘ event is emitted and error is passed as an argument to any listeners on the event.
  • message.headers:包含了随请求/回应发送的标头的一个对象
  • message.httpVersion:指定用于构建客户端请求/响应的HTTP版本
  • message.method:指定用于请求/响应的方法
  • message.rawHeaders:The raw request/response headers list exactly as they were received.
  • message.rawTrailers:The raw request/response trailer keys and values exactly as they were received. Only populated at the ‘end‘ event.
  • message.setTimeout(msecs, callback):设置连接的以毫秒为单位的套接字超时时间,连同一个如果发生超时时被执行的回调函数
  • message.statusCode:指定来自服务器的3位数状态码。此属性只在处理服务器响应的HTTP客户端上有效
  • message.statusMessage:
  • message.socket:这是一个指向net.Socket对象的句柄,用来与客户端/服务器通信
  • message.trailers:The request/response trailers object. Only populated at the ‘end‘ event.
  • message.url:发送到服务器的URL字符串,只在处理服务器中有效

五、http.Server对象

  1、描述:提供了实现HTTP服务器的基本框架。实现了EventEmitterl类

  2、创建对象:var server=http.createServer([requestListener]);

  2、该对象的事件

 事件  说明
 checkContinue  当收到包括期待的100-continue标头的请求时触发
 clientError  当客户单套接字发出一个错误时发出。
 close  服务器关闭时触发
 connect  接收到HTTP CONNECT请求时发出
 connection  当一个新的TCP流建立时触发
 request  当服务器收到客户端请求时触发
 upgrade  当客户端请求http升级时发出

   3、该对象的方法

  • server.close([callback]):服务器停止已经开始的监听
  • server.listen(port[, hostname][, backlog][, callback]):
    • port:指定监听的端口
    • hostname:指定主机名
    • backlog:指定被允许进行排队的最大待处理连接数。默认是511。
    • callback:指定改服务器已经开始在指定的端口上监听时,要执行的回调处理函数
  • server.listen(handle[, callback])和server.listen(path[, callback]):监听文件系统的连接。第一个是监听已打开文件描述句柄,第二个是要监听一个文件的路径

六、http.Agent类

  1、基本用法:

  • HTTP Agent 是用于把套接字做成资源池,用于HTTP客户端请求。
  • HTTP Agent 也把客户端的请求默认为使用Connection:keep-alive。如果没有HTTP请求正在等待成为空闲的套接字的话,那么套接字将关闭。这意味着Node的资源池在负载的情况下对keep-alive有利,但是仍然不需要开发人员使用KeepAlive来手动关闭HTTP客户端。
  • 如果你选择使用HTTP KeepAlive,那么你可以创建一个标志设为true的Agent对象。然后,Agent将会在资源池中保持未被使用的套接字,用于未来使用。它们将会被显式标记,以便于不保持Node进程的运行。但是当KeepAlive agent没有被使用时,显式地destroy() KeepAlive agent仍然是个好主意,这样套接字们会被关闭。
  • 当套接字触发了close事件或者特殊的agentRemove事件的时候,套接字们从agent的资源池中移除
  • 你可以直接使用agent:false选择完全停用资源池。

  2、构造函数

  3、属性

  4、方法

以上是关于Http模块的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地将 C 代码片段编译到我的 Perl 模块?

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

HTTP客户端代码片段

如何将字符串数据从活动发送到片段?

Python学习(22):模块

argparse 代码片段只打印部分日志