Http模块
Posted Beat Yourself
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 anderror
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、方法
以上是关于Http模块的主要内容,如果未能解决你的问题,请参考以下文章
CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段