node.js http

http服务端

概念:Node.js提供了http模块。其中封装了一个高效的HTTP服务器和一个建议的HTTP客户端。
             http.server是一个基于事件的HTTP服务器。内部有C++实现。接口由JavaScript封装。
            http.request则是一个HTTP客户端工具。用户向服务器发送请求。
一、HTTP服务器
          http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口
           前面讲解的app.js案例
            代码分析:
                http.createServer创建了一个http.Server的实例,将一个函数作为HTTP请求处理函数。这个函数接受两个参数,请求对象req和相应对象的res。res显式写入了响应代码200(表示请求成功),指定相应头,写入响应体。调用end结束并发送。该实例调用listen函数,启动服务器并监听3000端口。
           1.http.Server的事件
                http.Server是一个基于事件的HTTP服务器,所有请求都被封装到独立的事件,开发者只要对它的事件编写相应函数可实现HTTP服务器的所有功能,它继承与EventEmitter,提供了以下事件:
                 request:当客户端请求到来时,该事件被触发,提供两个参数req和res,分别是http.ServerRequest和http.ServerResponse的实例,表示请求和响应信息。
                connection:当TCP连接建立时,该事件被触发,提供一个参数socket,为net.Socket的实例(底层协议对象)。
                close:当服务器关闭时,该事件被触发。
            除此之外还有checkContinue、upgrade、clientError事件。
            最常用和关心的是:request事件,http提供了一个捷径,http.createServer([requestListener])
            显式实现方法:
                案例:server.js
            2.http.ServerRequest请求的信息
                    此对象是后端开发者最关注的内容,它一般由http.Server的request事件发送,作为第一个参数传递,通常简写成request或req。
                HTTP请求分为两部分:请求头和请求体。,请求内容短的直接在请求头解析完成后立即读取,而请求体可能相对较长,需要一定的时间传输,因此提供了3个事件用于控制请求体传输。
                 (1)data:当请求体数据到来时,该事件被触发,该事件一共一个参数chunk,表示接受到的数据。
                (2)end:当请求体数据传输完成时,该事件被触发,此后将不会再有数据到来。
                (3)close:用户当前请求结束时,该事件被触发,不同于end,如果用户强制终止了传输,也会触发close
                                                        ServerReuqest的属性
                    complete:客户端请求是否已经发送完成
                    httpVersion    HTTP协议版本,通常是1.0或1.1
                    method        HTTP请求方法,如:GET,POST
                    url                原始的请求路径,例如/pc/getUser或/user?name=marico
                    headers       HTTP请求头
                    trailers       HTTP请求尾(不常见)
                    connection              当前HTTP连接套接字,为net.Socket的实例
                    socket                   connection属性的别名
                    client            client属性的别名
            3.获取GET请求内容
                  由于GET请求直接被嵌入在路径中,URL完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET的参数,Nodejs的url模块中的parse函数提供了这个功能
                  案例:get.js
             4.获取POST请求内容
                POST请求的内容全部都在请求体中,http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。譬如上传文件。恶意的POST请求会大大消耗服务器的资源。所以Nodejs是不会解析请求体,当你需要的时候,需要手动来做。
                post.js
              5.http.ServerResponse返回给客户端的信息
                    决定了用户最终能到的结果,它是由http.Server的request事件发送的,作为第二个参数传递。一般为response或res
                    主要的三个函数:
                        response.writeHead(statusCode,[headers]):向请求的客户端发送响应头。
                                statusCode是HTTP的状态码,如200为成功,404未找到等。
                                headers是一个类似关联数组的对象,表示响应头的每个属性。
                        response.write(data,[encoding]) 向请求客户端发送相应内容,data是buffer或字符串,encoding为编码
                        response.end([data],[encoding]) 结束响应,告知用户所有发送已经完成, 当所有要返回的内容发送完毕,该函数必须被调用一次,如果不调用,客户端永远处于等待状态
http客户端
     一、http模块提供了两个函数http.request和http.get,功能是作为客户端向HTTP服务器发起请求。
            Ext.Ajax.request({},function(response))
            1.http.request(options,callback)发起HTTP请求,接受两个参数,option是一个类似关联数组的对象,表示请求的参数,callback是请求的回调函数,option常用的参数如下
                host:请求网站的域名或IP地址
                port:请求网站的端口,默认是80,
                method:请求方法,模式是GET/POST
                path:请求的相对于根的路径,默认是"/"。QueryString应该包含在其中,例如/search?query=marico
                headers:一个关联数组对象,为请求头的内容
            callback传递一个参数,为http.ClientResponse的实例
            http.request返回一个http.ClientRequest的实例
         案例:clientRequest.js
            2.http.get(options,callback) http模块还提供了一个更加简便的方法用于处理GET请求:http.get。它是http.request的简化版,唯一的区别在于http.get自动将请求方法设为GET请求,同时不需要手动调用req.end();
            
            案例:clientGet.js
    二、http.ClientRequest
                   该对象是由http.request或http.get返回产生的对象,表示一个已经产生而且正在进行的HTTP请求,它提供了response事件,即http。request或http.get第二个参数制定的回调函数的绑定对象,请求 必须调用end方法结束请求。
        提供的函数:
                request.abort() 终止正在发送的请求
                request.setTimeout(timeout,[callback]) 设置请求超时时间,timeout为毫秒数,当请求超时后,callback将会被调用
                其它:request.setNoDelay([noDelay])、request.setScoketKeepAlive([enable],[initialDelay])等函数。
                  API地址: http://nodejs.org/api/http.html
    三、http.ClientResponse
                http.ClientReponse是与http.ServerResponse相似,提供三个事件,data、end和close,分别在数据到达,传输结束和连接结束时触发,其中data事件传递一个参数chunk,表示接受到的数据
            属性,表示请求的结果状态
                statusCode   HTTP状态码,如200,404,500
                httpVersion:HTTP协议版本
                headers:HTTP请求头
                trailers:HTTP请求尾
            函数:
                    response.setEncoding([encoding]):设置默认的编码,当data事件被触发时,数据将以encoding编码。默认值为null,以buffer的形式存储。
                    response.pause():暂停接受数据和发送事件,方便实现下载功能。
                    response.resume():以暂停的状态中恢复
 
            





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值