美文网首页
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