Apache httpd webserver如何与Perl或PHP或CGI通信并获取输出并返回响应?

kne*_*han 1 php apache perl cgi

从客户端浏览器到Apache httpd webserver,通过TCP/IP(套接字)有一个明确定义的协议HTTP.我很难理解从Apache httpd webserver到Perl或PHP或CGI使用的通道/协议是什么?它是通过套接字或pipse或消息队列或信号进行进程间通信吗?有人能否了解幕后的真实情况?是否Apache httpd webserver执行另一个程序(Perl或PHP)并捕获输出然后将其重新发送到客户端浏览器?

Linux服务器安全性:

CGI协议未指定Web服务器应如何与CGI程序通信.有两个主要的解决方案:

独立的CGI程序

Apache接收一个CGI请求,打开一个到外部程序的双向管道,向它发送CGI输入数据,并将程序的输出返回给客户端.作为一个单独的进程,程序可能会崩溃而不会关闭Web服务器.缺点是启动新流程的速度相对较慢.

内置CGI程序

该程序被重写为Apache模块,只有在Apache进程启动时才会产生启动成本.这比外部程序快得多,并且可以访问Apache的内部和其他模块.Apache中最流行的CGI模块是Perl(mod_perl)和PHP(mod_php)的解释器引擎.

Foz*_*ozi 6

与CGI程序的通信通过两个通道完成:简单的IO重定向(即STDIN和STDOUT)和环境变量.

HTTP服务器将请求发送到CGI的STDIN.它从CGI的STDOUT读取HTTP响应并将其(略微修改)发送到客户端浏览器.其他服务器数据(如请求大小或某些服务器参数)设置为通常以HTTP_开头的环境参数.