方法和属性
- http.METHODS
- http.STATUS_CODES
- http.globalAgent
- http.createServer([requestListener])
- http.createClient([port][, host])
- http.request(options[, callback])
- http.get(options[, callback])
http.METHODS
- {Array}
由该分析器支持的 HTTP 方法列表。
http.STATUS_CODES
- {Object}
所有标准的 HTTP 响应状态码的集合,以及各自的简短描述。例如,http.STATUS_CODES[404] === 'Not Found'
。
http.globalAgent
全局代理的实例,默认作为所有 HTTP 客户端的请求。
http.createServer([requestListener])
返回一个新的 http.Server 实例。
requestListener
是一个自动添加到 'request'
事件中的函数。
http.createClient([port][, host])
稳定性:0 - 已废弃:使用 http.request() 代替。
构造一个新的 HTTP 客户端。port
和 host
指向被连接服务器。
http.request(options[, callback])
Node.js 维护每台服务器的多个连接来实现 HTTP 请求。该函数允许透明地发出请求。
options
可以是一个对象或字符串。如果 options
是一个字符串,它会自动使用 url.parse() 解析。
选项:
protocol
:使用的协议。默认为'http:'
。host
:发出请求的服务器域名或 IP 地址。默认为'localhost'
。hostname
:host
的别名。以支持 url.parse() 解析hostname
会优于host
。family
:在解析hostname
和host
时所使用的 IP 地址族。有效值是4
或6
。当它是unspecified
时,将同时使用 IPv4 和 IPv6。port
:远程服务器的端口。默认为80
。localAddress
:绑定到网络连接的本地接口。socketPath
:Unix Domain Socket(使用 host:port 和 socketPath 的其中之一)method
:一个指定 HTTP 请求方法的字符串。默认为'GET'
。path
:请求路径。默认为'/'
。应包括查询字符串(如有的话)。如'/index.html?page=12'
。当请求的路径中包含非法字符时,会引发异常。目前,只有空字符会被拒绝,但在将来可能会发生变化。headers
:一个包含请求头的对象。auth
:基本身份验证,如,'user:password'
来计算 Authorization 头。agent
:控制代理行为。如果使用代理请求,默认为Connection: keep-alive
。可能的值:undefined
(默认):对主机和端口使用 http.globalAgent。Agent
对象:明确地使用代理。false
:选择跳出连接池的代理,默认请求Connection: close
。
createConnection
:当不使用agent
信息选项时,产生一个用于请求的 socket/stream 的函数。这可以用于避免创建一个自定义的 Agent 类只是为了覆盖默认的createConnection
函数。详见 agent.createConnection() 了解更多信息。
可选的 callback
参数会被添加为 'response'
事件的一次性监听器。
http.request()
返回一个 http.ClientRequest 类的实例。ClientRequest
实例是一个可写流。如果一个人想要通过 POST 请求上传一个文件,然后写入到 ClientRequest
对象。
示例:
var postData = querystring.stringify({
'msg': 'Hello World!'
});
var options = {
hostname: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
}
};
var req = http.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.')
})
});
req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
});
// write data to request body
req.write(postData);
req.end();
请注意在示例中 req.end()
被调用。通过 http.request()
时,必须经常调用 req.end()
来表示你的请求已经结束 - 即使没有数据被写入请求主体。
如果请求过程中遇到任何错误(DNS 解析错误,TCP 级的错误,或实际的 HTTP 解析错误),在返回请求时,会发出 'error'
事件。对于所有的 'error'
事件而言,如果没有注册监听器,那么错误将被抛出。
这里有几个应该注意的特殊的头。
发送一个
'Connection: keep-alive'
将通知 Node.js 到服务器的连接,应一直持续到下一个请求。发送一个
'Content-length'
头将禁用默认块编码。发送一个
'Expect'
头会立即发送请求头。通常情况下,当发送'Expect: 100-continue'
,你应该设置超时并监听'continue'
事件。见 RFC2616 第 8.2.3 节以获取更多信息。发送 Authorization 头将覆盖使用
auth
选项计算基本身份验证。
http.get(options[, callback])
由于大多数 GET 请求都没有内容,Node.js 提供了这个便捷方法。该方法与 http.request() 的唯一区别是它设置该方法为 GET 并自动调用 req.end()
。
示例:
http.get('http://www.google.com/index.html', (res) => {
console.log(`Got response: ${res.statusCode}`);
// consume response body
res.resume();
}).on('error', (e) => {
console.log(`Got error: ${e.message}`);
});