CGI简单介绍

转载请务必在文章最开头标明原文地址
本文原创地址:博客园骏马金龙https://www.cnblogs.com/f-ck-need-u/p/7627035.html


什么是CGI

CGI是一种规范(协议),按照CGI规范编写的程序称为CGI脚本。CGI脚本能处理客户端发来的动态请求并返回响应。

CGI的工作方式

cgi_workflow.png

Http服务器(例如:Apache Http服务器)只能处理静态页面请求。(静态页面是指没有与用户交互的元素的页面,一般扩展名为.htm或.html)
Http服务器可以使用CGI协议向CGI脚本发送来自客户端的动态请求,CGI脚本处理完后把结果(一般是生成的html页面)发回给服务器,最终服务器再把结果发到客户端。

CGI脚本

任何一种语言都能编写CGI脚本。只要这种语言具有标准输入、输出和环境变量。Perl、PHP、Shell等都是常见的编写CGI程序的语言。

关于CGI的重要概念

以下用PHP为例子说明:

  • cgi/fastcgi:都是协议。fastcgi是cgi的优化
  • php-cgi:fastcgi协议的实现
  • php-fmp:是php-cgi的进程管理器
  • cgi进程/线程:在php上,就是php-cgi进程/线程。专门用于接收web server的动态请求,调用并初始化zend虚拟机
  • zend虚拟机:对php文件做词法分析、语法分析、编译成opcode,并执行。最后关闭zend虚拟机。


    php-fpm.png

    php-cgi.png

web server和CGI的交互模式

web server对cgi进程/线程来说,它的作用就是发起动态处理请求,传递一些参数和环境变量,最后接收cgi的返回结果。

  • cgi模式:web server每次收到动态请求就新建一个cgi进程
  • 动态模块模式:将php-cgi的模块(例如php5_module)编译进httpd。在httpd启动时会加载模块,加载时也将对应的模块激活,php-cgi也就启动了。
  • php-fpm模式:使用php-fpm管理php-cgi,此时httpd不再控制php-cgi进程的启动。可以将php-fpm独立运行在非web服务器上,实现所谓的动静分离。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容