• Node.js之HTTP请求与响应


    在C#、OC中也是客户端发起一个请求,服务端作出响应。我们可以把这个过程抽象理解 .

    1.客户端给服务端发起请求相当于向服务端写入一个流(writable)

    2.服务端读取客户端的流(readable)

    3.服务端向客户端作出响应相当于向客户端写入一个流(writable)

    4.客户端读取服务端的响应(readable)

    整个流程分为两部分一是客户端的处理而是服务端的处理.最主要的还是客户端请求和服务端响应.

    一、http.ClientRequest对象

    它实现了writable流,可以使用它的所有功能。http模块中使用http.request(options,callback)方法来生成该对象。

    1.options主要包括以下几个可选:

    host :服务器域名或IP地址,默认localhost

    hostname:与host相同,但对url.parse()的支持优于host.

    port:端口

    localAddress:网络连接的本地接口

    socketPath:Unix域套接字(使用host:port或socketPath)

    method:请求方法 :GET、POST等默认GET

    path:请求的资源路径默认/.也可包括查询字符串

    headers:请求头

    auth:身份认证

    agent:代理.如果使用Agent,则请求默认为Connection:keep-alive.可能的值有undefined,Agent,false

    2.ClientRequest提供的事件与方法

    事件:

    response:当从服务器收到该请求的响应时发出。该回调处理程序接收一个IncomingMessage对象作为唯一的参数。

    socket:当一个套接字分配给该请求时发出。

    connect:当服务器响应一个由CONNECT方法发起的一个请求时发出。如果该事件未被客户端处理,那么该连接将关闭

    upgrade:当服务器响应在其标头包括一个更新请求的请求时发出

    continue:当服务器发送一个100ContinueHTTP响应,指示客户端发送请求正文时发出

    方法:

    write()、end()和writable流一样

    abort():终止请求。

    setTimeout(timeout,[callback]):设置请求超时时间

    setNoDelay([noDelay]):noDelay布尔值,true立即写入,false缓冲写入

    setSocketKeepAlive([enable],[initualDelay]):启用和禁用对客户机请求的保持活动功能。initualDelay指定最后一个数据包和第一个保持活动请求之间的延迟。

    二、http.ServerResponse对象

    和http.ClientRequest对象一个也是实现了writable流。也可实现writable流的功能,另外还包括下面的事件属性和方法。

    事件或属性:

    close:在Response.End()刷新响应之前关闭时发出。

    headersSent:布尔值.已发送为true.只读。

    sendDate:布尔值,true时,Date标头自动生成,并作为响应的一部分发送

    statusCode:无须显示的写入标头来指定响应状态码。

    方法:

    writeContinue():发送一个HTTP/1.1 100 Continue消息给客户端,请求被发送的正文内容

    writeHead(statusCode,[reasonPhrase],[headers]):把一个响应标头写入请求。statusCode参数是HTTP响应状态代码,reasonPhrase是字符串,表示StatusCode的原因.headers是响应标头对象。response.writeHead(200,'Success',{'Content-Length':body.length,'Content-Type':'text/plain'});

    setTimeout(msecs,callback):设置客户端连接的超时时间。

    setHeader(name,value):设置标头值。

    getHeader(name):获取标头值。

    removeHeader(name):移除标头。

    addTrailers(headers):将http尾随标头写入响应的结束处。

    三、客户端响应和服务端请求

    上面一二主要是writable流的,readable流的包括客户端响应和服务端请求。它们都是一个对象:IncomingMessage对象。

    IncomingMessage对象长成什么样子可以把它输出来看.由于IncomingMessage对象对于我们开发的来说不经常用,所以看看就好。

    var http=require("http")
    var options={
        hostname:'www.baidu.com',
        path:'',
        port:'80',
        method:'GET'
    };
    var  req=http.request(options,function(response){
        console.log(response);
    });
    req.end();
  • 相关阅读:
    POJ 3419 Difference Is Beautiful (DP + 二分 + rmq)
    CodeForces 755C PolandBall and Forest (并查集)
    CodeForces 754D Fedor and coupons (优先队列)
    CodeForces 753C Interactive Bulls and Cows (Hard)
    CodeForces 754C Vladik and chat (DP+暴力)
    HDU 1996 汉诺塔VI (排列组合)
    HDU 1995 汉诺塔V (水题)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
    How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧
  • 原文地址:https://www.cnblogs.com/5ishare/p/5323625.html
Copyright © 2020-2023  润新知