关于CGI
来源:互联网 发布:如何用微信推广淘宝 编辑:程序博客网 时间:2024/05/21 17:25
1. CGI(Common Gateway Interface)可以说是一种替代用户直接访问服务器上文件而诞生的一种“代理”,用户通过CGI来获取动态数据或文件等。
从最原始的意义上来说,CGI是一种设计思想,其最早的实现是每次请求都直接调用操作系统来创建进程、销毁进程,这种程序虽然效率不高但是给WEB数据动态访问提供了很好的思路。
现在经过改进的CGI效率已经大大提高,尤其是fastCGI等实现。
而WSGI是Web Server Gateway Interface的简称,从名字上看和CGI一定有渊源。事实上,由于之前的CGI程序和编写WEB服务所用的语言往往是不同的(CGI用C,WEB用PHP等),WSGI的其中一个目的就是让用户可以用统一的语言编写前后端,WSGI参考了CGI的设计,对CGI的设计思想进行了进一步包装。
2. fastcgi: apache/lighttpd的一个模块,虽然flup可以作为一个独立的web server使用,但是对于浏览器请求处理一般都交给 apache/lighttpd处理,然后由apache/lighttpd转发给flup处理,这样就需要一个东西来把apache/lighttpd跟flup联系起来,这个东西就是fastcgi,它通过环境变量以及socket将客户端请求的信息传送给flup并接收flup返回的结果
3. 腾讯的后台,大部分是用C++开发的,也有一部分用php,java,python等。各部门之间差别很大。
但是我们要知道,url路径与后台实现其实没有什么必然联系。我们很多网站,明明不是用cgi写的,却故意要在url中加个cgi-bin;明明不是jsp,却在url中加个.jsp;明明不是nginx,500的时候却故意输出个nginx错误信息;主要是为了误导一下黑客们。
url后缀有个经验. php asp结尾的顾名思义可以知道是什么语言写的
.do .action .jsp 通常是java技术写的.
浏览器
的角度来看,浏览器只负责发送请求,接收来自WebServer
的返回结果并渲染之。对于WebServer
来讲,它需要做的仅仅是接收请求,寻找浏览器
请求的文件并且发送回去。如果仅仅是这样,世界就很完美了。但是后来发生的事情大家都知道了。。我们不光要浏览静态网页,我们还要登陆论坛、发帖骂人灌水踩答案点赞刷声望等等。这些行为是静态的Html没法完成的。所以有了JS、Flash等等基于前端的交互技术。WebServer
把包含了这些代码的文件发给浏览器
,后者把它解析称它应该有的样子(或者不应该有的样子,比如IE6),我们可以在页面上看看动画什么的,这些称之为前段交互技术。
但是有些交互前端做不了, 比如我上次发了一个高清无码套图,我要看到大家的反应,点个赞啊楼主好人啊之类的,那么这个技术就要用到数据库,但是数据库本身是需要另外一种语言来操作的,这种语言可以是python、prel、Ruby、PHP等等,我们称之为动态语言
。他们对数据库进行增删查改四大操作,并且返回结果给WebServer
,后者再传给浏览器。
由于有很多动态语言和很多种Web服务器,他们彼此之间互不兼容,给程序员造成了很大的麻烦。那么,CGI
应运而僧。CGI
的定义是统一网关接口。从此WebServer
收到后台动态交互请求就直接发给CGI
,CGI
发给动态语言,动态语言把结果发回给CGI
,CGI
再发回给WebServer
,后面的事情你都清楚了。。。。
那么结论就是,CGI
是一个翻译层,它的功能不是直接提供结果给浏览器,而是翻译来自WebServer的请求并转给后台的应用程序,并且把执行结果翻译成静态网页返回给WebServer
,所以,是不能互换的。
6. 比如,如果请求/index.html
,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php
,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。Nginx会传哪些数据给PHP解析器呢?url要有吧,查询字符串也得有吧,POST数据也要有,HTTP header不能少吧,好的,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议.当web server收到/index.php
这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。
- 关于CGI
- 关于CGI
- 关于CGI
- 关于CGI
- 关于 CGI 的安全性
- 关于cgi、FastCGI、php-fpm、php-cgi
- 关于cgi、FastCGI、php-fpm、php-cgi
- 关于cgi的一些总结
- 关于cgi的一些总结
- 关于php-cgi的配置
- 关于公共网管接口CGI
- 关于CGI的一些认识
- 关于CGI的一些认识
- 【转】关于cgi、FastCGI、php-fpm、php-cgi
- 关于CGI、fastcgi、PHP-CGI、PHP-FPM的理解
- CGI
- CGI
- CGI
- hdu 1166 第一道线段树,点更新
- C++中STL常用容器的优点和缺点
- cocoapods的 使用 安装
- C#创建的库用regasm 程序注册
- 【dfs or 最短路】【HDU1224】【Free DIY Tour】
- 关于CGI
- android录音开发
- Python学习大纲
- iOS多线程GDC异步操作
- .NET领域优秀的开源电商系统--NopCommerce
- Orge配置Debug - 在Mac上利用Homebrew安装指定版本的Cmake
- web.xml的配置中<context-param>配置作用
- SqlTransaction——事务详解
- IOS 中self. 和_访问变量的区别