今天看nginx
的时候,虽然基本的配置和使用可以照着网上的教程即可,但是对于nginx
的运行原理一直不是很理解,包括其中的概念,其中最困惑的就是FastCGI
这一套东西,始终无法理解这套机制是怎么运行的?通过查资料发现,要理解FastCGI
首先要知道CGI
是什么,“通用网关接口(Common Gateway Interface)”,一看就是让人懵圈的名词,要想彻底明白什么是CGI
,有必要回溯一下Web
技术的发展。
最一开始的时候,Web
浏览器中展现的完全是静态页面,与用户的交互几乎没有,所以这时候的使用主要还是局限在页面的展示,比如说介绍一些产品,或者发布一些信息。现在在网上看一下静态的技术文档的时候,其实这时候使用的技术在Web
早期的时候就能实现,但是随着互联网的发展,迫切需要与应用程序进行交互,如果要实现交互,使用静态页面是不行的,这就需要根据用户的需求来动态的展示页面。这时候CGI
就出现了。
所以要明确的一点是CGI
是为了生成动态页面而发展形成的。
- 因为早期生成动态页面的动作是在Web服务器端完成的(虽然现在的趋势有点前后端分离的感觉,页面的生成可以完全靠前端的
JavaScript
来完成),所以这种技术是一种服务端技术。 - 还要明白的是
CGI
不是一种具体的实现技术,比如说Java
或者Python
等编程语言,严格的说,它更像是Http
或者TCP
、UDP
等等的一种协议,具体规定了动态页面怎么生成,从它的名字“接口”也可以看出,这其实只是一种规范而已;
一、 CGI和Servlet的运行过程
由于我的主语言是Java
,手里开发的项目主要是Java Web
那一套东西,而且恰好由于Java Web
的核心内容Servlet
正是与CGI
是作为Web
技术中底层数据传输的两个分支,它们生成动态页面的方式也是迥异的。其实如果想要更容易的理解什么是CGI
,以及与Servlet
有什么区别?首先要明白的是什么是Web Server
?什么是Servlet Container
?如果这两个概念能够区分清楚对于理解CGI
是很有帮助的。
那么CGI
技术是怎样在生成动态页面的过程中起作用的呢