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 and error 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、方法

时间: 2024-10-12 19:45:35

Http模块的相关文章

Day5 - 常用模块学习

本节大纲: 模块介绍(模块导入方法) time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一堆代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又

c# 无法加载xxx.dll 找不到指定的模块(如何指定文件夹)

如果直接放在项目运行目录,例如bin/debug可以直接加载,但是这样比较乱. 如果在放debug里面的一个文件夹里面,有可能会报错“无法加载xxx.dll 找不到指定的模块”. 如果路径写成这样就会报错 framework/linphone 解决方法:将/ 改成"\" framework\linphone

LEDAPS1.3.0版本移植到windows平台----HuCsm云掩膜模块

这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. HuCsm是将LEDAPS项目中的TM/ETM+大气校正流程系列算法中的云掩膜模块由linux系统移植到windows下的产物,代码本身改动不大,使用接口不变. 包含文件: HuCsm.exe hd423m.dll hm423m.dll 编译程序需要包含的静态库有: gctp.lib hdfeos.lib hd423m.lib hm423m

Python学习系列----第五章 模块

5.1 如何引入模块 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入.在调用math模块中的函数时,必须这样引用: 模块名.函数名 有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句 from 模块名 import 函数名1,函数名2.... 5.2 如何定义自己的模块 在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字. 比如有这样一个文件test.py

Python:hashlib加密模块,flask模块写登录接口

hashlib模块 主要用于加密相关的操作,(比如说加密字符串)在python3的版本里,代替了md5和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 这些加密方式 import  hashlib m = hashlib.md5()   #用md5加密的方式(md5加密后无法解密),创建一个md5的对象 m.update(b"Hello")  #b代表二进制字节bytes,把字符串hello转成字节,然后加密:用b给一个变量转换

python如何使用pymysql模块

Python 3.x 操作MySQL的pymysql模块详解 前言pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而MySQLdb不支持3.x版本. 一.安装 pip3 install pymysql 二.pymysql方法 pymysql.connect()参数说明 参数 类型 说明 host str mysql服务器地址 port int mysql服务器端口号 user str 用户名 passwd str

微控工具xp模块-开发版[微信(wechat)二次开发模块]

http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信群发.多群直播等...) 目前支持功能: 发文本消息 发图片消息 发语音消息 发视频消息 获取微信好友列表 群列表 支持群发消息 支持消息转发(目前支持文本.图片.语音.视频.图文消息转发) 群管理功能(建群.加人.踢人.设置公告.改群名.退群.解散群) [注:本模块

用ESP8266 WIFI模块连接服务器,并实现与服务器相互通讯

最近在做一个智能锁的项目,该项目要求实现在任何地方(当然是要有网络的)可以在手机上用APP开锁.而我负责的部分主要是实现底层与服务器连接,并且要能相互通讯.考虑了很多问题,最终选择了用ESP8266 WIFI模块实现了这个功能.下面向大家就简单分享一下. 工具:网络调试助手  ESP8266  STM32F1开发板 首先,用网络调试助手来虚拟一个服务器,如下: 有了服务器后,接下来我们就要用WIFI来连接这个服务器.ESP8266 有三种工作模式,由于项目要求,我选用了STA中的客户端模式.下面

Saltstack批量编译部署nginx(多模块)

最近一直在研究saltstack的同步文件和批量执行命令,随着架构的变大,批量部署的需求也变得明显起来了,我需要用一条命令就部署好nginx和tomcat,并且符合我所有的环境需求,可以直接投入生产环境使用,这就需要用到saltstack的批量安装部署功能了.这篇文章主要介绍nginx的批量部署,下篇讲解tomcat多实例的批量部署方法. 环境介绍: Centos 6.5 salt 2015.5.10 nginx 1.12.0 minion:test 1.修改master配置文件,修改后重启服务

python:模块导入之浅认识

(1)python有大量的模块: 1.内部提供的模块:不需要安装,可以直接调用 2.第三方库:包括业内开源的模块和自己开发的,需要安装 (2)什么是pyc文件: pyc文件的pycodeobject的一种持久化保存,而pycodeobject则是python真正编译的结果 明白什么时pyc文件,则我们需要从python的运行过程说起: 1.首先当python程序运行时,编译的结果则是保存在位于内存中的pycodeobject中,当python运行结束时,将pycodeobject写入到pyc文件