【问题标题】:Node HTTP Timeout When Sending Cookies in Header (Request/Restler)在标头中发送 Cookie 时节点 HTTP 超时(请求/Restler)
【发布时间】:2017-07-24 04:15:25
【问题描述】:

我正在使用 Node.js 开发 RESTFUL api。这是应该发生的事情:

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

我的问题在第 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 和 URL 是它们的预期值

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;

【问题讨论】:

  • 确切的 Postman 命令行是什么?
  • 我解决了这个问题(见下文)。但感谢您提供帮助。

标签: php node.js rest cookies


【解决方案1】:

原来问题不在于我的 REST 服务器,而在于我的 PHP 服务器。同一个 PHP 服务器既从 Node.js 请求数据又对请求进行身份验证。但是,PHP 不能并行处理同一个会话。

解决方案:

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

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多