- Node简介
- 第一个node程序
- module(模块系统)
- npm包管理器
- 模块系统优先级
- 认识http内置模块
- url内置模块
- path内置模块
- fs内置模块
- http模块服务端进阶
- http报文浅析
- url模块进阶
- path模块进阶
- querystring模块进阶
- 了解Buffer和Stream
- os模块
- Buffer模块
- Stream模块
- http模块客户端
- Cookie浅析
HTTP模块
http模块是用来创建http连接的,它具有少量的属性和方法,但是通过http模块操作得到的各种实例化对象却十分的复杂。
HTTP模块对象的属性
http.METHODS
:返回解析器支持的 HTTP 方法的列表。
http.STATUS_CODES
:返回标准的 HTTP 响应状态码的集合,以及各自的简短描述。
HTTP模块对象的 createServer
方法
该方法用来创建一个服务端实例化对象
语法 :http.createServer([requestListener])
requestListener
是一个回调函数,形式如下:
const http = request('http');
let server = http.createServer(function(request,response){
code......
});
该方法返回一个 http.server
类的一个实例化对象。
HTTP模块对象的 http.server
类
该类为服务端实例化对象,用来接收和处理客户端发送来的请求。
该类具有如下属性和方法:
server.listen([port][, host][, backlog][, callback])
方法:
- port :监听端口
- host :监听IP
- backlog :连接队列的最大长度,实际长度将通过 OS 的 sysctl 设置, 例如 linux 里的
tcp_max_syn_backlog
和somaxconn
。 这个参数的默认值是511 (不是512)。 - callback :异步回调,开启监听后将触发次回调,相当于触发了
listening
事件。
server.listening
属性:
- 返回一个布尔值,表示服务器是否正在监听连接。
server.close([callback])
方法:
停止服务端接收新的连接。callback :回调函数。
该类具有如下事件:
"close"
,"connect"
, "request"
HTTP模块对象的 http.IncomingMessage
类
该类的实例化对象可以认为就是我们 request
对象。
该类具有如下属性:
message.headers
:返回请求头对象。
message.httpVersion
:在服务器请求中,该属性返回客户端发送的 HTTP 版本。 在客户端响应中,该属性返回连接到的服务器的 HTTP 版本。 可能的值有 '1.1'
或 '1.0'
。
message.method
:仅在 http.Server
返回的请求中有效,返回一个字符串,表示请求的方法。 该属性只读。 例如:'GET'
、'DELETE'
。
message.rawHeaders
:接收到的原始的请求头列表。注意,键和值在同一个列表中。 偶数位的是键,奇数位的是对应的值。
message.url
:返回请求的 URL 字符串。
HTTP模块对象的 http.ServerResponse
类
该对象在 HTTP 服务器内部被创建。 它作为第二个参数被传入 'request'
事件,也就是我们的 response
对象。
该对象具有如下属性和方法:
response.getHeader(name)
:读取一个已入队列但尚未发送到客户端的响应头。 注意,名称不区分大小写。
response.getHeaders()
:返回当前响应头文件的浅拷贝。 由于使用了浅拷贝,因此数组值可能会改变,无需对各种与响应头相关的http模块方法进行额外调用。 返回对象的键是响应头名称,值是各自的响应头值。 所有响应头名称都是小写的。
response.getHeaderNames()
:返回一个包含当前响应唯一名称的 http 头信息名称数组,名称均为小写。
response.hasHeader(name)
:如果响应头当前有设置 name
头部,返回 true
。请注意,名称匹配不区分大小写。
response.setHeader(name, value)
:为一个隐式的响应头设置值。 如果该响应头已存在,则值会被覆盖。 如果要发送多个名称相同的响应头,则使用字符串数组。
response.setHeader('Content-Type', 'text/html');
response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);
注意:response.setHeader()
设置的响应头会与 response.writeHead()
设置的响应头合并,且 response.writeHead()
的优先。
response.writeHead(statusCode[, statusMessage][, headers])
:发送一个响应头给请求。 状态码是一个三位数的 HTTP 状态码,如 404
。 最后一个参数 headers
是响应头。 第二个参数 statusMessage
是可选的状态描述。
该方法在消息中只能被调用一次,且必须在 response.end()
被调用之前调用。
没有设置头前调用 response.write()
,则隐式的响应头会被处理。
response.write(chunk[, encoding][, callback])
:chunk
可以是一个字符串或一个 buffer。 如果 chunk
是一个字符串,则第二个参数指定如何将它编码成一个字节流。 encoding
默认为 'utf8'
。 当数据块被刷新时,callback
会被调用。
response.end([data][, encoding][, callback])
:该方法会通知服务器,所有响应头和响应主体都已被发送,即服务器将其视为已完成。 每次响应都必须调用 response.end()
方法。
response.finished
:返回一个布尔值,表示响应是否已完成。 默认为 false
。 执行response.end()之后,该值会变为 true
。
请求的接收
node如何接收GET或者POST请求:
- GET请求:使用request.url来得到请求;
- POST请求:使用request.addListener或者request.on来得到请求:
- addListener与on方法完全相同,该方法有两个参数,一个是监听状态’data’或’end’,另一个是回调函数,回调函数中有一个chunk数据块参数:使用querystring模块中的parse方法对请求的数据进行对象化。