NodeJS的Http服务端模块进阶

附录:常用HTTP响应头和请求头信息对照表

  1. Node简介
  2. 第一个node程序
  3. module(模块系统)
  4. npm包管理器
  5. 模块系统优先级
  6. 认识http内置模块
  7. url内置模块
  8. path内置模块
  9. fs内置模块
  10. http模块服务端进阶
  11. http报文浅析
  12. url模块进阶
  13. path模块进阶
  14. querystring模块进阶
  15. 了解Buffer和Stream
  16. os模块
  17. Buffer模块
  18. Stream模块
  19. http模块客户端
  20. 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_backlogsomaxconn。 这个参数的默认值是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方法对请求的数据进行对象化。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值