- 2021-07-05
- 阅读()
- 来源:互联数据
CGI是什么?比如以前的Web服务器,只能响应浏览器发来的HTTP静态资源的请求,并将存储在服务器中的静态资源返回给浏览器。随着Web技术的发展,逐渐出现了动态技术,但是Web服务器并不能够直接运行动态脚本,为了解决Web服务器与外部应用程序(CGI程序)之间数据互通,于是出现了CGI(Common Gateway Interface)通用网关接口。服务器内的数据通过CGI转换传输到web浏览器上去并显示出来的,所以CGI这个应用程序就是在大家开展业务的过程中数据传输的桥梁。
1、CGI的作用
CGI是Web服务器和一个独立的进程之间的协议,它会把HTTP请求Request的Header头设置成进程的环境变量,HTTP请求的Body正文设置成进程的标准输入,进程的标准输出设置为HTTP响应Response,包含Header头和Body正文。
CGI在web服务的业务开展中,是桥梁的作用,有着数据转化以及传输的作用、还有着保存用户信息以及上传的作用,还能在客户搜索的时候提供一个小型数据库的作用。这些功能在大家的业务开展中是不可缺少的。
2、CGI 程序
CGI只是一个接口规范或协议,它的实现则与具体的编程语言相关。在2000年以前,CGI通用网关接口盛行,那个时候,Perl是编写CGI的主流语言,以至于一般的CGI程序都是Perl程序。
通过CGI接口,Web服务器就能够获取客户端传递的数据,并转交给服务器端的CGI程序处理,然后返回结果给客户端。简单来说,CGI实际上是一个接口标准。而通常所说的CGI指代其实是CGI程序,也就是实现了CGI接口标准的程序,只要编程语言具有标准输入、标准输出和环境变量,就可以用来编写CGI程序。
CGI程序通过标准输入(STDIN)和标准输出(STDOUT)进行数据的输入输出,此外CGI程序还通过环境变量来得到输入,操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了一些环境变量,用来向CGI程序传递一些重要的参数。CGI的GET方法还通过环境变量QUERY_STRING向CGI程序传递Form表单中的数据。
对于一个CGI程序,主要的工作是从环境变量和标准输入中读取数据,然后处理数据,最后向标准输出中输出数据。
3、环境变量
环境变量中存储的叫做Request Meta-Variables,也就是诸如QUERY_STRING、PATH_INFO之类的,这些都是由Web服务器通过环境变量传递给CGI程序的,CGI程序也是从环境变量中读取的。
4、标准输出
中存放的往往是用户通过PUTS或POST提交的数据,这些数据也是由Web服务器传递过来的。
为了处理动态请求,Web服务器会根据请求的内容,Fork创建一个新进程来运行外部C程序或Perl脚本等,这个进程会把处理完的数据返回给Web服务器,然后Web服务器把内容发送给用户,Fork创建出来的进程也会随之退出。如果下次用户请求为动态脚本,那么Web服务器会再次Fork创建一个新进程,如此周而复始的运行。
以Nginx接收HTTP请求为例,Nginx接收一个HTTP请求后Fork创建出一个进程,将HTTP请求带来的参数作为输入,执行完程序处理后输出,最终会摧毁这个Fork出来的进程,并将输出返回给客户端。这种方式虽然简单,但是需要不断地Fork进程和销毁进程。
5、CGI程序的工作原理
Web服务器一般只用来处理静态文件请求,一旦碰到动态脚本请求,Web服务器主进程就会Fork创建出一个新的进程来启动CGI程序,也就是将动态脚本交给CGI程序来处理。启动CGI程序需要一个过程,如读取配置文件、加载扩展等。当CGI程序启动后会去解析动态脚本,然后将结果返回给Web服务器,最后由Web服务器将结果返回给客户端,之前Fork出来的进程也随之关闭。这样,每次用户请求动态脚本,Web服务器都要重新Fork创建一个新进程去启动CGI程序,由CGI程序来处理动态脚本,处理完成后进程随之关闭,其效率是非常低下的。
PHP-CGI
CGI是一个协议,PHP语言对CGI接口规范的实现也就是PHP-CGI,也就是PHP的解释器。随着技术的发展,PHP-CGI的性能问题逐渐暴露,不是那么尽如人意。PHP在运行的时候是依赖配置文件php.ini的,所以每当PHP-CGI开始工作的时候,它完全是一个新进程,需要重新加载PHP配置文件并初始化,这就造成了很大的资源和时间的浪费。
每当客户端请求CGI时,Web服务器就会请求操作系统生成一个新的CGI解释器进程php-cgi.exe,CGI的一个进程处理完一个请求后退出,下一个请求来时在先操作系统申请创建新进程。在访问量较少没有并发的情况下这样做是没有问题的,一旦出现访问量增大,并发出现时这种方式就不再合适了,于是便出现了FastCGI。
6、CGI的优点
除了在业务开展中传输数据的作用,在web服务的用户访问方面,因为html无法直接记住客户信息,而在业务开展的过程中是可以记录用户信息的,这也是CGI的功劳,所以CGI还可以很好的记住并把客户的访问信息传输到web服务器中去。让大家能够实时查看到web服务的客户访问情况,并及时作出调整,以便于更好的开展web服务。其次还有许多html无法提供的功能都是通过CGI补充完美的,如可以当作一个计数器、搜索程序、web数据库等等。并且在编写CGI应用程序时,CGI可以通过多种编写语言来编写,如C、C++、jave等等,让大家不必在编写CGI脚本方面特地的去学习某种语言。
使用的过程中CGI应注意的几个问题:
因为CGI程序需要传输以及转换文件格式,所以CGI程序的运行也是需要占用cpu以及内存的,所以大家在开展
- 上一篇:DDN专线接入是什么?与ADSL专线区别
- 下一篇:服务器做Raid5需要几块硬盘?