读书笔记《七天学会NodeJS》(2) - 网络操作
0. http http模块可支持服务器使用和客户端使用。 服务器端使用: http.createServer创建服务器对象,调用服务器对象的listen监听某端口,等待客户端请求;也是一种基于回调事件机制。 HTTP请求由请求头+请求内容组成,请求头与请求内容(请求体)间有个空行,在http接收请求回调函数中request参数对象可访问请求头数据以及请求内容。 HTTP响应由响应头+响应内容组成,在http接收请求回调函数中response参数对象可写入响应数据头以及数据内容(响应体)。 客户端使用: http.request创建客户端对象并指定请求目标和请求头数据,此后调用客户端对象的write写入请求数据内容,调用end结束请求调用。 此外对于GET请求,不需要请求体信息,可直接调用http.get的便捷API。 接收到响应信息时,会调用回调函数,在此函数中的response参数对象可访问响应头数据以及响应体数据。 对于采用http.request或http.get方式的HTTP请求时,实际上使用内部的http.globalAgent,也即是全局客户端,但全局客户端并发连接数目前至多为5个, 若超过则可能发生socket hang up错误,此时可采用调大http.globalAgent.maxSockets属性值来解决, 同样的https模块客户端也有同样的问题也可以以此方式解决。 ...... 1. https 相对HTTP,https需额外处理SSL证书。 https.createServer相对http.createServer,多了一个参数对象以指定证书密钥信息(key、cert属性)。 ...... 2. url 一般在http/https请求时,用到url内置模块以解析URL、生成URL以及拼接URL。 url.parse解析url字符串为URL对象。 url.format则反向将URL对象转为url字符串。 url.resolve拼接字符串构造url字符串。 ...... 3. querystring querystring内置模块实现相互转化url参数字符串与参数构成的对象 querystring.parse解析url字符串为参数构成的对象。 querystring.stringify则反向转化参数对象为url字符串。 ...... 4. zlib zlib内置模块可以实现压缩数据和解压数据,其也可用在压缩或解压http请求数据体以及响应数据内容, 在http请求头信息中获取判断对方是否支持对应的压缩以及压缩方式accept-encoding,以及响应信息头中的content-encoding; 以此方式过程中,请求方应在请求头信息中添加Accept-Encoding以及对应的响应方在响应头信息中需添加Content-Encoding均为gzip。 zlib.gzip采用gzip压缩方式压缩数据内容。 zlib.gunzip则解压被压缩的数据内容。 ...... 5. net net内置模块可创建基于socket的服务器或客户端。 net.createServer创建服务器对象并调用listen监听端口。回调参数对象为连接对象,可监听data事件以及调用write写数据。 net.connect创建客户端对象,options参数指定连接地址和端口。 使用net模块也可实现HTTP协议的底层操作(事实上传输内容用http对应的信息头+空行+数据内容即可实现http的封装)。 ......