美文网首页
Node Native (5) http

Node Native (5) http

作者: 小懒豆 | 来源:发表于2018-04-19 16:26 被阅读15次

    Node中提供了http模块,其中封装了高效的http服务器和http客户端

    属性

    • http.METHODS:

    • http.STATUS_CODES:返回标准的 HTTP 响应状态码的集合,以及各自的简短描述。

    • globalAgent:Agent 的全局实例,作为所有 HTTP 客户端请求的默认 Agent。

    • close:

    方法

    • createServer([requestListener]):返回一个新建的 http.Server 实例。

    一、http.Agent 类

    Agent 负责为 HTTP 客户端管理连接的持续与复用。

    构造函数

    • new Agent([options]):

    options <Object>代理的配置选项。有以下字段:

    • keepAlive <boolean>保持 socket 可用即使没有请求,以便它们可被将来的请求使用而无需重新建立一个 TCP 连接。默认为 false
    • keepAliveMsecs <number> 当使用了 keepAlive 选项时,该选项指定 TCP Keep-Alive 数据包的 初始延迟。 当 keepAlive 选项为 falseundefined 时,该选项无效。 默认为 1000
    • maxSockets <number>每个主机允许的最大 socket 数量。 默认为 Infinity
    • maxFreeSockets <number>在空闲状态下允许打开的最大 socket 数量。 仅当 keepAlivetrue 时才有效。 默认为 256

    属性

    • close:
    • close:

    方法

    二、http.Server 类

    该类继承自 net.Server.

    事件

    • checkContinue:每当接收到一个带有 HTTP Expect: 100-continue 请求头的请求时触发。
    • checkExpectation:每当接收到一个带有 HTTP Expect 请求头(值不为 100-continue)的请求时触发
    • clientError:如果客户端触发了一个 'error' 事件,则它会被传递到这里
    • connect:每当客户端发送 HTTP CONNECT 请求时触发.
    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
    
    • request:每次接收到一个请求时触发。 注意,每个连接可能有多个请求(在 HTTP keep-alive 连接的情况下)
    *   `request` <http.IncomingMessage>
    *   `response` <http.ServerResponse>
    
    // req 是 http.IncomingMessage 的实例,这是一个 Readable Stream
    // res 是 http.ServerResponse 的实例,这是一个 Writable Stream
    
    • upgrade:每当客户端发送 HTTP upgrade 请求时触发。

    属性

    • timeout:socket 被认定为超时的空闲毫秒数。
    • keepAliveTimeout:超时毫秒. 默认为 5000 (5秒).
    • maxHeadersCount:限制请求头的最大数量,默认为 2000。 如果设为 0,则没有限制。

    方法

    • setTimeout([msecs][, callback]):设置 socket 的超时时间。

    三、http.ClientRequest 类

    该对象在 http.request()内部被创建并返回。 它表示着一个正在处理的请求,其请求头已进入队列。 请求头仍可使用 setHeader(name, value)getHeader(name)removeHeader(name)API 进行修改。 实际的请求头会与第一个数据块一起发送或当调用 request.end()时发送。

    • http.request(options[, callback]):http.request() 返回一个 http.ClientRequest类的实例。 ClientRequest 实例是一个可写流。 如果需要通过 POST 请求上传一个文件,则写入到 ClientRequest 对象。
    *   `options` <Object>| <string> | <URL>
        *   `protocol` <string>使用的协议。默认为 `http:`。
        *   `host` <string>请求发送至的服务器的域名或 IP 地址。默认为 `localhost`。
        *   `hostname` <string>`host` 的别名。为了支持 `url.parse()`,`hostname` 优先于 `host`。
        *   `family` <number>当解析 `host` 和 `hostname` 时使用的 IP 地址族。 有效值是 `4` 或 `6`。当未指定时,则同时使用 IP v4 和 v6。
        *   `port` <number>远程服务器的端口。默认为 `80`。
        *   `localAddress` <string>为网络连接绑定的本地接口。
        *   `socketPath`[<string>Unix 域 Socket(使用 host:port 或 socketPath)。
        *   `method` <string>指定 HTTP 请求方法的字符串。默认为 `'GET'`。
        *   `path` <string>请求的路径。默认为 `'/'`。 应包括查询字符串(如有的话)。如 `'/index.html?page=12'`。 当请求的路径中包含非法字符时,会抛出异常。 目前只有空字符会被拒绝,但未来可能会变化。
        *   `headers` <Object> 包含请求头的对象。
        *   `auth` <string> 基本身份验证,如 `'user:password'` 用来计算 `Authorization` 请求头。
        *   `agent` <http.Agent> | <boolean> 控制 `Agent`的行为。 可能的值有:
            *   `undefined` (默认): 对该主机和端口使用 `http.globalAgent`
            *   `Agent` 对象:显式地使用传入的 `Agent`。
            *   `false`: 创建一个新的使用默认值的 `Agent`。
        *   `createConnection` <Function>当不使用 `agent` 选项时,为请求创建一个 socket 或流。 这可以用于避免仅仅创建一个自定义的 `Agent` 类来覆盖默认的 `createConnection` 函数。详见 `agent.createConnection()`。 
        *   `timeout` <number>: 指定 socket 超时的毫秒数。 它设置了 socket 等待连接的超时时间。
    *   `callback` <Function>
    
    const postData = querystring.stringify({
      'msg' : 'Hello World!'
    });
    
    const options = {
      hostname: 'www.google.com',
      port: 80,
      path: '/upload',
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': Buffer.byteLength(postData)
      }
    };
    
    const req = http.request(options, (res) => {
      console.log(`状态码: ${res.statusCode}`);
      console.log(`响应头: ${JSON.stringify(res.headers)}`);
      res.setEncoding('utf8');
      res.on('data', (chunk) => {
        console.log(`响应主体: ${chunk}`);
      });
      res.on('end', () => {
        console.log('响应中已无数据。');
      });
    });
    
    req.on('error', (e) => {
      console.error(`请求遇到问题: ${e.message}`);
    });
    
    // 写入数据到请求主体
    req.write(postData);
    req.end();
    
    
    • get(options[, callback]):因为大多数请求都是 GET 请求且不带请求主体,所以 Node.js 提供了该便捷方法。 该方法与 http.request() 唯一的区别是它设置请求方法为 GET 且自动调用 req.end()。 注意,回调函数务必消耗掉响应数据,

    事件

    • abort:当请求已被客户端终止时触发。

    • response:当请求的响应被接收到时触发。 该事件只触发一次。

    • socket:当 socket 被分配到请求后触发。

    • timeout:当底层 socket 超时的时候触发

    • connect:每当服务器响应 CONNECT 请求时触发。

    • continue:当服务器发送了一个 100 Continue 的 HTTP 响应时触发,通常是因为请求包含 Expect: 100-continue。

    • upgrade:每当服务器响应 upgrade 请求时触发。

    属性

    • aborted:如果请求已被终止,则该属性的值为请求被终止的时间

    • socket:引用底层socket。

    方法

    • abort():

    • end([data[, encoding]][, callback]):

    • flushHeaders():

    • etHeader(name):

    • removeHeader(name):

    • setHeader(name, value):

    • setNoDelay([noDelay]):

    • setSocketKeepAlive([enable][, initialDelay]):一旦 socket 被分配给请求且已连接,socket.setKeepAlive()会被调用。

    • setTimeout(timeout[, callback]):一旦 socket 被分配给请求且已连接,socket.setTimeout()会被调用。

    • write(chunk[, encoding][, callback]):发送请求主体的一个数据块

    四、http.IncomingMessage 类

    http.Serverhttp.ClientRequest创建,并作为第一个参数分别递给 'request''response'事件。 它可以用来访问响应状态、消息头、以及数据。它实现了 可读流接口,http.IncomingMessage是HTTP请求的信息,

    事件

    • aborted:当请求已被终止且网络 socket 已关闭时触发。
    • close:当底层连接被关闭时触发。

    属性

    • headers:请求头或响应头的对象。

    • httpVersion:在服务器请求中,该属性返回客户端发送的 HTTP 版本。 在客户端响应中,该属性返回连接到的服务器的 HTTP 版本。

    • method:

    • rawHeaders:接收到的原始的请求头或响应头列表。

    • rawTrailers:接收到的原始的 Trailer 请求头或响应头的的键和值。 只在 'end' 事件时被赋值。

    • socket:通过 HTTPS 的支持,使用 request.socket.getPeerCertificate()获取客户端的认证信息。

    • statusCode:

    • statusMessage:

    • url:****仅在 http.Server 返回的请求中有效。

    • close:

    方法

    • destroy([error]):
    • setTimeout(msecs, callback):

    五、http.ServerResponse 类

    该对象在 HTTP 服务器内部被创建。 它作为第二个参数被传入 'request'事件。这个类实现了(而不是继承自)可写流接口。 它是一个有以下事件的 EventEmitter

    事件

    • close:当底层连接在 response.end()被调用或能够刷新之前被终止时触发。

    • finish:当响应已被发送时触发。

    属性

    • finished:返回一个布尔值,表示响应是否已完成。

    • headersSent:返回一个布尔值(只读)。 如果响应头已被发送则为 true,否则为 false。

    • sendDate:当为 true 时,如果响应头里没有日期响应头,则日期响应头会被自动生成并发送。默认为 true。

    • socket:引用底层socket。

    • statusCode:当使用隐式的响应头时(没有显式地调用 response.writeHead(),该属性控制响应头刷新时将被发送到客户端的状态码。

    • statusMessage:当使用隐式的响应头时(没有显式地调用 response.writeHead(),该属性控制响应头刷新时将被发送到客户端的状态信息。

    方法

    • addTrailers(headers):该方法会添加 HTTP 尾部响应头(一种在消息尾部的响应头)到响应。

    • end([data][, encoding][, callback]):该方法会通知服务器,所有响应头和响应主体都已被发送,即服务器将其视为已完成。

    • getHeader(name):

    • getHeaderNames():

    • getHeaders():返回当前响应头文件的浅拷贝。

    • hasHeader(name):

    • removeHeader(name):

    • setHeader(name, value):

    • setTimeout(msecs[, callback]):

    • write(chunk[, encoding][, callback]):

    • writeContinue():

    • writeHead(statusCode[, statusMessage][, headers]):

    相关文章

      网友评论

          本文标题:Node Native (5) http

          本文链接:https://www.haomeiwen.com/subject/qimvkftx.html