为请求选项的集合获取一个唯一的名称,用来判断一个连接是否可以被复用。 对于 HTTP 代理,返回 host:port:localAddress。 对于 HTTPS 代理,名称会包含 CA、证书、密码、以及其他 HTTPS/TLS 特有的用于判断 socket 复用性的选项
【agent.maxFreeSockets】
默认为 256。 对于已启用 keepAlive 的代理,该属性可设置要保留的空闲 socket 的最大数量
【agent.maxSockets】
默认为不限制。 该属性可设置代理为每个来源打开的并发 socket 的最大数量。 来源是一个 'host:port' 或 'host:port:localAddress' 组合
【agent.requests】
返回一个对象,包含还未被分配到 socket 的请求队列。 不要修改
【agent.sockets】
返回一个对象,包含当前正被代理使用的 socket 数组。 不要修改
Request
【http.ClientRequest】
该对象在http.request()内部被创建并返回。它表示着一个正在处理的请求,其请求头已进入队列。请求头仍可使用setHeader(name, value)、getHeader(name) 和 removeHeader(name) API 进行修改。实际的请求头会与第一个数据块一起发送或当关闭连接时发送
要获取响应,需为 'response' 事件添加一个监听器到请求对象上。当响应头被接收到时,'response' 事件会从请求对象上被触发 。 'response'事件被执行时带有一个参数,该参数是一个 http.IncomingMessage 实例。在 'response' 事件期间,可以添加监听器到响应对象上,比如监听 'data' 事件
如果没有添加 'response' 事件处理函数,则响应会被整个丢弃。如果添加了 'response' 事件处理函数,则必须消耗完响应对象的数据,可通过调用 response.read()、或添加一个 'data' 事件处理函数、或调用.resume() 方法。数据被消耗完时会触发'end' 事件。在数据被读取完之前会消耗内存,可能会造成 'process out of memory' 错误
[注意]Node.js 不会检查 Content-Length 与已传输的请求主体的长度是否相等

var http = require('http');var server = http.createServer(function(req, res){
console.log(req.url );//'/'
console.log(req.httpVersion );//1.1
console.log(req.method );//GET
//{"host":"127.0.0.1:5000","connection":"keep-alive","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36","accept":"p_w_picpath/webp,p_w_picpath/*,*/*;q=0.8","referer":"http://127.0.0.1:5000/","accept-encoding":"gzip, deflate, sdch, br","accept-language":"zh-CN,zh;q=0.8,en;q=0.6"} console.log(JSON.stringify(req.headers) );
res.end('ok');
});
server.listen(5000);

【abort事件】
当请求已被客户端终止时触发。 该事件仅在首次调用 abort() 时触发
【aborted事件】
当请求已被服务器终止且网络 socket 已关闭时触发
【connect事件】
response socket head
当服务器响应CONNECT请求时触发。 如果该事件未被监听,则接收到CONNECT方法的客户端会关闭连接
【continue事件】
当服务器发送了一个 100 Continue 的 HTTP 响应时触发,通常是因为请求包含 Expect: 100-continue。 这是客户端将要发送请求主体的指令
【response 事件】
response
当请求的响应被接收到时触发。 该事件只触发一次
【socket 事件】
socket
当 socket 被分配到请求后触发
【upgrade事件】
response socket head
每当服务器响应 upgrade 请求时触发。 如果该事件未被监听,则接收到 upgrade 请求头的客户端会关闭连接
【request.abort()】
标记请求为终止。 调用该方法将使响应中剩余的数据被丢弃且 socket 被销毁
【request.aborted】
如果请求已被终止,则该属性的值为请求被终止的时间,从 1 January 1970 00:00:00 UTC 到现在的毫秒数
【request.end([data][, encoding][, callback])】
data | encoding callback
结束发送请求。 如果部分请求主体还未被发送,则会刷新它们到流中。 如果请求是分块的,则会发送终止字符 '0\r\n\r\n'。
如果指定了 data,则相当于调用 response.write(data, encoding) 之后再调用 request.end(callback)。
如果指定了 callback,则当请求流结束时会被调用
【request.flushHeaders()】
刷新请求头
出于效率的考虑,Node.js 通常会缓存请求头直到 request.end() 被调用或第一块请求数据被写入。 然后 Node.js 会将请求头和数据打包成一个单一的 TCP 数据包。通常那是期望的(因为它节省了 TCP 往返),除非第一个数据块很长时间之后才被发送。 request.flushHeaders() 可以绕过最优选择并提前开始请求
【request.setNoDelay([noDelay])】
noDelay
一旦 socket 被分配给请求且已连接,socket.setNoDelay() 会被调用
【request.setSocketKeepAlive([enable][, initialDelay])】
enable initialDelay
一旦 socket 被分配给请求且已连接,socket.setKeepAlive() 会被调用
【request.setTimeout(timeout[, callback])】
timeout 可选的函数,当超时发生时被调用。等同于绑定到 timeout 事件
返回 request
一旦 socket 被分配给请求且已连接,socket.setTimeout() 会被调用
【request.write(chunk[, encoding][, callback])】
chunk | encoding 参数是可选的,仅当 chunk 是一个字符串时才有效。默认为 'utf8' callback 参数是可选的,当数据块被刷新时调用
返回 request
发送请求主体的一个数据块。 通过多次调用该方法,一个请求主体可被发送到一个服务器,在这种情况下,当创建请求时,建议使用 ['Transfer-Encoding', 'chunked'] 请求头
Server
大多数nodejs开发者都是冲着开发web server的目的选择了nodejs。借助http模块,可以几行代码就搞定一个超迷你的web server
【http.createServer([requestListener])】
该方法创建并返回一个HTTP服务器对象
requestListener表示监听到客户端连接的回调函数
var server = http.createServer(function(req,res){});
【server.listen(port[, hostname][, backlog][, callback])】
该方法在指定的的端口和主机名上开始接收连接
port表示要监听的端口,若不设置,则端口由系统自动分配
若忽略主机名hostname,服务器将会接收指向任意IPv4的地址(INADDR_ANY)
若监听一个unix socket,需要提供一个文件名而不是主机名和端口
若积压量backlog为等待连接队列的最大长度,即允许多少个客户端在队列中存在。实际的长度由操作系统的sysctl设置决定。默认参数值为511
最后一个参数callback是异步函数,会作为事件监听器添加到listening事件
server.listen(5000);
【request事件】
当有客户端发送请求到该主机和端口的请求的时候触发
参数request : http.IncomingMessage的一个实例,通过他我们可以获取到这次请求的一些信息,比如头信息,数据等
参数response : http.ServerResponse的一个实例,通过他我们可以向该次请求的客户端输出返回响应
server.on('request',function(request,response){
console.log('收到信息');
})
由于createServer()的参数是requestListener,所以可以把request事件中的回调函数写为createServer()的参数
var server = http.createServer(function(req,res){
console.log('收到信息');
});
于是,利用上面几个方法就可以创建一个简单的server
var http = require('http');var server = http.createServer(function(req,res){
console.log('收到信息');
});
server.listen(5000);
在浏览器地址栏中输入127.0.0.1:5000,控制台会显示'收到信息'这4个字
【checkContinue事件】
request response
每当接收到一个带有 HTTP Expect: 100-continue 请求头的请求时触发。 如果该事件未被监听,则服务器会自动响应 100 Continue
处理该事件时,如果客户端应该继续发送请求主体,则调用 response.writeContinue(),否则生成一个适当的 HTTP 响应(例如 400 错误请求)。
[注意]当该事件被触发且处理后,request 事件不会被触发
【checkExpectation事件】
request response
每当接收到一个带有 HTTP Expect 请求头(值不为 100-continue)的请求时触发。 如果该事件未被监听,则服务器会自动响应 417 Expectation Failed。
[注意]当该事件被触发且处理后,request 事件不会被触发
【clientError事件】
exception socket socket 参数是发生错误的 net.Socket 对象
如果客户端触发了一个error事件,则它会被传递到这里。该事件的监听器负责关闭或销毁底层的socket。例如,用户可能希望更温和地用HTTP '400 Bad Request'响应关闭 socket,而不是突然地切断连接
默认情况下,请求异常时会立即销毁 socket

var http = require('http');var server = http.createServer((req, res) => {
res.end();
});
server.on('clientError', (err, socket) => {
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
server.listen(8000);

当 'clientError' 事件发生时,不会有 request 或 response 对象,所以发送的任何 HTTP 响应,包括响应头和内容,必须被直接写入到 socket 对象。 注意,确保响应是一个被正确格式化的 HTTP 响应消息
【close事件】
当服务器关闭时触发
【connect事件】
request HTTP 请求,同 request 事件。
socket 服务器与客户端之间的网络 socket。
head 流的第一个数据包,可能为空。
当客户端发送HTTP CONNECT请求时触发。 如果该事件未被监听,则发送CONNECT请求的客户端会关闭连接
当该事件被触发后,请求的 socket 上没有 data 事件监听器,这意味着需要绑定 data 事件监听器,用来处理 socket 上被发送到服务器的数据
【connection 事件】
socket
当一个新的 TCP 流被建立时触发。 socket 是一个 net.Socket 类型的对象。 通常用户无需访问该事件。 注意,因为协议解析器绑定到 socket 的方式,socket 不会触发 'readable' 事件。 socket 也可以通过 request.connection 访问
【upgrade事件】
request HTTP 请求,同 'request' 事件。
socket 服务器与客户端之间的网络 socket。
head 流的第一个数据包,可能为空。
每当客户端发送HTTP upgrade请求时触发。 如果该事件未被监听,则发送upgrade请求的客户端会关闭连接
当该事件被触发后,请求的 socket 上没有 'data' 事件监听器,这意味着需要绑定 'data' 事件监听器,用来处理 socket 上被发送到服务器的数据
【server.close([callback])】
停止服务端接收新的连接
【server.listening】
返回一个布尔值,表示服务器是否正在监听连接
【server.maxHeadersCount】
默认为 2000
限制请求头的最大数量,默认为 2000。 如果设为 0,则没有限制
【server.setTimeout([msecs][, callback])】
msecs 默认为 120000 (2
返回 server
设置socket的超时时间。 如果发生超时,则触发服务器对象的'timeout'事件,并传入socket作为一个参数
默认情况下,服务器的超时时间是 2 分钟,且超时后的 socket 会被自动销毁。 但是,如果你为服务器的 'timeout' 事件分配了一个回调函数,则超时必须被显式地处理
【server.timeout】
超时时间,以毫秒为单位。默认为 120000 (2 分钟)
socket 被认定为超时的空闲毫秒数。值设为 0 可禁用请求连接的超时行为
[注意]socket 的超时逻辑是在连接上设定的,所以改变这个值只影响服务器新建的连接,而不会影响任何已存在的连接
response
该对象在 HTTP 服务器内部被创建。 它作为第二个参数被传入 'request' 事件。这个类实现了(而不是继承自)可写流接口

var http = require('http');var server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
res.end('小火柴');
});
server.listen(8000);


【close事件】
当底层连接在 response.end() 被调用或能够刷新之前被终止时触发
【finish事件】
当响应已被发送时触发。 更具体地说,当响应头和响应主体的最后一部分已被交给操作系统通过网络进行传输时,触发该事件。 这并不意味着客户端已接收到任何东西。该事件触发后,响应对象上不再触发其他事件
【response.addTrailers(headers)】
headers