我如何实现CGI在我的自定义Node.js服务器


How Do I Implement CGI In My Custom Node.js Server?

我计划扩展我的自定义node.js服务器来实现CGI连接到脚本执行器,如PHP。为了设置PHP的$_GET, $_POST和$_SERVER变量,以便我可以运行PHP脚本,我需要知道一些关于CGI是如何实现的。

看了RFC3875,我明白我需要设置某些定义的变量,通过组成包含这些变量及其值的文档,例如,REQUEST_METHOD="GET"或REQUEST_METHOD="POST"。

我要问的多部分问题是:

[1]这样创建的文档如何传递给PHP可执行文件,以便它可以填充其变量?

[2]我用文档中的哪些条目来填充$_GET和$_POST,如果有的话?

[3]如果填充$_GET和$_POST是通过不同的机制实现的,使用什么机制,我将如何实现它?

请记住以下几点:

[1]我对实现 CGI的业务完全陌生,而不仅仅是使用它,所以我欢迎适当的一步一步的分解;

[2]我不是在寻找一个现成的解决方案,我在寻找允许我写自己的代码来执行这个任务的信息,这样我就可以正确地学习CGI是如何工作的。

我已经写了一个node.js服务器处理GET和POST成功的node.js服务器端脚本,所有我现在需要的是上面的信息,让我使用PHP扩展这个功能到CGI脚本(可能Perl,如果我有时间调查处理Perl脚本)。

请提前提供相关信息

RFC3875在定义"文档"answers"元变量"的实际含义方面有点迟钝。

实际意思是:

  • CGI脚本或执行程序(如PHP)作为可执行文件启动。在node.js术语中,这可能意味着使用child_process.spawn()。CGI脚本不需要传递任何命令行参数

  • CGI的"请求元变量"作为环境变量传递给可执行文件。

  • 如果脚本是为带有请求体(如POST或PUT)的请求调用的,则请求体将在标准输入中传递。这是"请求消息体"

  • 脚本将在类似HTTP响应的标准输出中打印结果。这就是"CGI响应"。结果通常可以被解析,如果它是一个HTTP响应,但某些头(特别是StatusLocation)将需要一些特殊的处理。