nodejs http模块

http模块

  • node.js使用了单线程,非阻塞的事件编程模式。

  • node.js异步式io:顾名思义异步io就是不会一直阻塞io接口,使得程序占用cpu且能够继续执行下去并且有效提高程序执行效率。 程序瓶颈主要在于两方面:io利用率,cpu利用率。
  • node.js服务器解析

    var http = require('http');
    //require是node.js用于导入函数库的,不是js自带的功能,并且js没有相关功能
    
    http.createServer(function(req, res) {   
        res.writeHead(200, {'Content-Type': 'text/html'});   
        res.write('<h1>Node.js</h1>');   
        res.end('<p>Hello World</p>'); }).listen(3000); 
    //http.createServer函数的参数requestListener是一个函数,并且该函数会自动加入到request事件的监听队列中,从而实现单线程多事件。
    //function(req,res)就是function (request, response) { }。而request是http.IncomingMessage的一个实例,response是http.ServerResponse的一个实例
    
    console.log("HTTP server is listening at port 3000.");
    //node命令可以直接执行js文件,可以直接让console.log输出,平时可以用它学学js,调调代码什么的。
    
  • 上面谈到了http.IncomingMessage和http.serverResponse,下面就学习http模块

    • http.IncomingMessage:一个 IncomingMessage对象是由 http.Server或http.ClientRequest创建的,并作为第一个参数分别传递给'request'和'response' 事件。它也可以被用来访问应答的状态,头文件和数据。
      • req.httpVersion 用于表示接受请求/响应时的http协议版本
      • req.headers 用于表示接收的http请求/响应的http头部
      • req.method 用于表示接受的http请求使用的方法。“get” "head"等等
      • req.url 用于请求时的url字符串 与http报文中的http方法后跟的url一致
      • req.statusCode 用于表示接受相应时的状态码
    • http.ServerResponse:类名 下列的res是它的一个实例

      • res.writeHead(statusCode,[reasonPhase],headers),向请求回复响应头,而不是设置响应头。注意该方法只能在当前请求中使用一次。 可以选择性的吧人类可读的原因短语作为第二个参数。举例如下

        var body = 'hello world';
        response.writeHead(200, {
                'Content-Length': body.length,
                'Content-Type': 'text/plain' });
        
      • res.writeContinue() 发送http 100状态码
      • res.statusCode 表示http的状态码 可写
      • res.statusMessage 可写 用于设置response的状态消息
      • res.setHeader(name,value) 用于设置header头部的属性,如果属性的值有多个,那么value就是一个数组,否则是一个字符串

        response.setHeader("Content-Type", "text/html");
        response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);
        
      • res.headerSent 布尔值,如果头部被发送,值为True,否则为false
      • res.removeHeader(name) 移除http头部的某一项
      • res.getHeader(name) 获取http头部的某一项
      • res.write(chunk[,encoding][,callback]) 用于写入http的body,当res.write被调用时,http的头部和body将会发送给客户端。
      • res.end([data],[enconding]) 当所有的响应报头和报文被发送完成时这个方法将信号发送给服务器;服务器会认为这个消息完成了。 每次响应完成之后必须调用该方法。如果指定了参数 data , 就相当于先调用 response.write(data, encoding) 之后再调用 response.end()
      • http.get 因为大部分的请求是没有报文体的GET请求,所以Node提供了这种便捷的方法。该方法与http.request()的唯一区别是它设置的是GET方法并自动调用req.end()。
原文地址:https://www.cnblogs.com/lifeisshort/p/4862284.html