在标头中发送Cookie时的节点HTTP超时(请求/重定时器)

时间:2017-07-21 18:13:26

标签: php node.js rest cookies

我正在使用Node处理RESTFUL api。这是应该发生的事情:

  1. 网页通过SSL向节点服务器发送REST请求(此请求包含一个cookie:我们将用于验证的ci_session)
  2. 节点服务器查找所请求操作的权限代码(每个资源都有自己的代码)
  3. 向PHP服务器发送RESTful请求,以使用步骤1中的cookie和步骤2中的权限代码进行身份验证。
  4. PHP服务器响应成功/失败
  5. 如果返回成功,则让节点执行所请求的资源
  6. 第1步的页面获得回复
  7. 我的问题出在第3步。

    //Using 'Restler'(which is built on 'Request')
    var rest = require("restler");
    
    //Authenticate
    //This is Hanging
    rest.get( 'URL_TO_PHP_REST', {    headers:{
                                          "Cookie": v_cookie
                                      }
                                  }
    ).on("success", function(){...});  
    

    调试:

    • 我用Postman测试了所有RESTful端点;他们工作。
    • 如果我省略了第3步中的cookie,那么请求会立即通过(虽然用户将始终无法通过身份验证)
    • Cookie和网址是其预期值

    示例Cookie

    ac=0atu2rrp5ifeet0s5kdb62rbeov7ktnr

    Restler如何发送请求

    //Parameters
    //url = 'URL_TO_PHP_REST'
    //options = {headers:{"Cookie":"ac=0atu2rrp5ifeet0s5kdb62rbeov7ktnr"}}
    
    var request = new Request(url, options);
    request.on('error', function() {});
    process.nextTick(request.run.bind(request));
    return request;
    

1 个答案:

答案 0 :(得分:0)

结果问题不是我的REST服务器,而是我的PHP服务器。同一个PHP服务器都从Node.js请求数据并验证请求。但是,PHP无法并行处理同一会话。

解决方案:

  • 在请求脚本中添加session_write_close()会清除锁定,以便可以运行身份验证。
  • 使用不同的服务器/语言请求资源(即使用节点前端而不是PHP)