zoukankan      html  css  js  c++  java
  • 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、方法

    All rights reserved please indicate the source if reprint---吓尿了的大肥鼠
  • 相关阅读:
    5分钟带你了解Kafka的技术架构
    聊聊我的知识体系
    你分得清楚Maven的聚合和继承吗?
    为抖音而生的多闪,如何获取抖音的用户数据?
    消息中间件系列第3讲:使用消息队列需要考虑的几个问题
    消息中间件系列第2讲:如何进行消息队列选型?
    消息中间件系列第1讲:为什么要用消息队列?
    JVM规范系列开篇:为什么要读JVM规范?
    安全编码实践之三:身份验证和会话管理防御
    安全编码实践之二:跨站脚本攻击防御
  • 原文地址:https://www.cnblogs.com/realsoul/p/5625396.html
Copyright © 2011-2022 走看看