zoukankan      html  css  js  c++  java
  • http协议的API

    1.http.createServer([requestListener])

    它是http模块的一个静态方法。

    参数requestListener 是一个会被自动添加到 request 事件中的函数,request事件触发的函数第一个参数为:

    request <http.IncomingMessage>

    response <http.ServerResponse>

    解释 :request事件是每次接收到一个请求时触发, 注意,每个连接可能有多个请求(在 HTTP keep-alive 连接的情况下)。

    一般requestListener如下:

    function(req, res, next) {
        // req是http.IncomingMessage的实例。
        app.handle(req, res, next);
     };

    返回为http.server,它是由net.Server 类继承过来。

    2.express中res对象是http.ServerResponse的一个实例。

    这个对象通常由HTTP SERVER 建立而非用户手动建立, serverResponse有如下事件和方法:

    'close' 事件
    'finish' 事件
    response.addTrailers(headers)
    response.end([data][, encoding][, callback])
    response.finished
    response.getHeader(name)
    response.headersSent
    response.removeHeader(name)
    response.sendDate
    response.setHeader(name, value)
    response.setTimeout(msecs, callback)
    response.statusCode
    response.statusMessage
    response.write(chunk[, encoding][, callback])
    response.writeContinue()
    response.writeHead(statusCode[, statusMessage][, headers])

    对象的创建源码是:

    var res = new ServerResponse(req);

    它继承OutgoingMessage,而且end() 正是 OutgoingMessage.prototype.end()

    3.req

      (1)req是http.IncomingMessage 类的一个实例, http.IncomingMessage类(对象)也是HTTP模块对TCP连接的读操作(实现了可读流接口)的封装。

      成员:1:headers(请求/响应头的对象)。报头名称和值的键值对,报头名称为小写!

                 2:url 它是请求的 URL 字符串,仅包含 HTTP 请求实际存在的 URL,注意:它不含域名:类似/m/login.html,第一个字符为“/”。

      事件:1:abort事件

               2:close事件

     4.http.ClientRequest对象

    2.第二种情况就是客户端发出http请        求的 http.request()方法的返回结果,也可以是(http.get

    var http=require('http');  
    var options={  
         hostname:'localhost',  
         port:1337,  
         path:'/',  
         method:'GET'  
    };  
    var req=http.request(options,function(res){  
        //获取到服务器的返回数据  
        res.on('data',function(chunk){  
            //这里的chunk是Buffer对象,这一点一定要注意是编码的数据  
            console.log(res instanceof http.IncomingMessage);  
            //这里打印true  
        })  
    })  
    req.end();  
    //必须调用,否则客户端不会发送请求到服务

     http.ClientRequest对象在 http.request() 内部被创建并返回,它用于写入HTTP客户端请求数据,一般用在设置代理服务器,也就是说:req代表客户端请求的一个可写入的对象,在nodejs内部创建。

    一个http是如何解析socket数据和处理业务函数、响应客户端的请求,参考:http://www.xiedacon.com/2017/08/18/Node.js%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90-HTTP%E8%AF%B7%E6%B1%82%E5%93%8D%E5%BA%94%E8%BF%87%E7%A8%8B/#Base

    5.获取机器的IP值

    exports.getCurrentIp = function(){  
        /** 
         * 系统模块 
         * @type {Object} 
         */  
        var os = require('os');  
        /** 
         * 获得系统的网卡列表 
         * @type {Object} 
         */  
        var ipObj = os.networkInterfaces();  
        //获取系统的网卡  
        var result = [];  
        for(var i in ipObj) {  
            // 获得某个网卡下面的ip列表  
            var ipList = ipObj[i];  
            for(var j = 0; j < ipList.length; j += 1) {  
                // 某个网卡的某个ip  
                var ip = ipList[j];  
                //result中保存的是IPv4的地址  
                if(ip.family === 'IPv4') {  
                    result.push(ip.address);  
                }  
            }  
        }  
        return result;  
    };  
  • 相关阅读:
    python基本数据类型(—)
    linux基本命令
    1、认识Mysql
    Flask-SQLAlchemy详解
    sqlalchemy基本增删改查
    pymongo方法详解
    uWSGI+Nginx部署
    uwsgi
    nginx负载均衡配置
    redis-sentinel主从复制高可用(哨兵)
  • 原文地址:https://www.cnblogs.com/liuyinlei/p/6548475.html
Copyright © 2011-2022 走看看