我计划扩展我的自定义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响应,但某些头(特别是
Status
和Location
)将需要一些特殊的处理。