CGI是一个公共网关接口。顾名思义,它是所有东西的“通用”网关接口。从名字上看,它是如此的琐碎和幼稚。我觉得我明白了,每次遇到这个词我都有这种感觉。但坦白说,我没有。我还是很困惑。
我是一个有网页开发经验的PHP程序员。
用户(客户端)请求页面——> webserver(->嵌入式PHP
---->服务器端(PHP)脚本—> MySQL服务器。
现在说我的PHP脚本可以从MySQL服务器和MATLAB服务器和其他服务器获取结果。
PHP脚本是CGI?因为它的接口之间的web服务器和所有其他服务器?我不知道。有时他们称CGI为技术,有时他们称CGI为程序或其他服务器。
What exactly is CGI?
Whats the big deal with /cgi-bin/*.cgi? What's up with this? I don't know what is this cgi-bin directory on the server for. I don't know why they have *.cgi extensions.
Why does Perl always comes in the way. CGI & Perl (language). I also don't know what's up with these two. Almost all the time I keep hearing these two in combination "CGI & Perl". This book is another great example CGI Programming with Perl. Why not "CGI Programming with PHP/JSP/ASP"? I never saw such things.
CGI Programming in C, confuses me a lot. "in C"?? Seriously?? I don't know what to say. I'm just confused. "in C"?? This changes everything. Program needs to be compiled and executed. This entirely changes my view of web programming. When do I compile? How does the program gets executed (because it will be a machine code, so it must execute as a independent process). How does it communicate with the web server? IPC? and interfacing with all the servers (in my example MATLAB & MySQL) using socket programming? I'm lost!!
People say that CGI is deprecated and isn't in use anymore. Is that so? What is the latest update?
Once, I ran into a situation where I
had to give HTTP PUT request access to
web server (Apache HTTPD). Its a long
back. So, as far as I remember this is
what I did:
Edited the configuration file of Apache HTTPD to tell webserver to pass
all HTTP PUT requests to some
put.php ( I had to write this PHP
script)
Implement put.php to handle the request (save the file to the location
mentioned)
People said that I wrote a CGI Script.
Seriously, I didn't have a clue what
they were talking about.
我真的写了CGI脚本吗?
我希望你能理解我的困惑。(因为我自己也不知道我在哪里感到困惑)。我要求你们的回答尽量简单。我真的不懂任何花哨的专业术语。至少在这种情况下不是。
编辑:
我发现了这个神奇的教程“CGI编程很简单!”- CGI教程,以最简单的方式解释概念。阅读完本文后,您可能想要阅读C语言CGI编程入门,用实际的代码示例来补充您的理解。我还在维基百科的文章中添加了本教程的链接:http://en.wikipedia.org/wiki/Common_Gateway_Interface
The CGI is specified in RFC 3875, though that is a later "official" codification of the original NCSA document. Basically, CGI defines a protocol to pass data about a HTTP request from a webserver to a program to process - any program, in any language. At the time the spec was written (1993), most web servers contained only static pages, "web apps" were a rare and new thing, so it seemed natural to keep them apart from the "normal" static content, such as in a cgi-bin directory apart from the static content, and having them end in .cgi.
那时,还没有像PHP这样专门的“web编程语言”,C是主要的可移植编程语言——所以很多人用C来编写他们的CGI脚本。但是Perl很快被证明更适合这类事情,CGI在一段时间内几乎成为Perl的代名词。然后出现了Java servlet、PHP和其他一些语言,它们占据了Perl的大部分市场份额。
CGI到底是什么?
web服务器从程序(而不是,例如,一个文件)中获取数据的方法。
/cgi-bin/*.cgi有什么大不了的?
没什么大不了的。这只是一种惯例。
我不知道服务器上的cgi-bin目录是干什么用的。
我不知道他们为什么有*.cgi扩展名。
服务器必须知道如何处理该文件(即将其视为要执行的程序,而不是简单地提供的东西)。拥有.html扩展名告诉它使用text/html内容类型。使用.cgi扩展名可以让它作为程序运行。
将可执行文件保存在单独的目录中可以提供一些额外的保护,防止执行不正确的文件和/或在服务器配置错误时将CGI程序作为原始数据提供。
为什么Perl总是碍事。
它不是。Perl和CGI在同一时期非常流行。
我已经很多年没用过Perl CGI了。我使用mod_perl很长一段时间了,现在倾向于使用PSGI/Plack和FastCGI。
这本书是用Perl编写CGI程序的另一个很好的例子
为什么不是“CGI编程与PHP/JSP/ASP”。
CGI的效率不是很高。与PHP同时出现了与web服务器上的程序进行通信的更好方法。JSP和ASP是与程序对话的不同方法。
C语言的CGI编程让我很困惑。在C ? ?严重吗? ?
它是一种编程语言,为什么不呢?
什么时候编译?
编写代码
编译
访问URL
web服务器运行程序
程序是如何执行的(因为它将是一个机器码,所以它必须作为一个独立的进程执行)。
它不必作为一个独立的进程执行(你可以用C语言编写Apache模块),但是CGI的整个概念是它启动一个外部进程。
它如何与web服务器通信?IPC吗?
STDIN/STDOUT和环境变量-在CGI规范中定义。
并使用套接字与所有服务器(在我的例子MATLAB和MySQL)连接
编程吗?
使用任何您喜欢和支持的方法。
他们说CGI被贬低了。它不再被使用了。是这样吗?
CGI效率低,速度慢,而且简单。它很少被使用,当它被使用时,那是因为它简单。如果性能不是一个大问题,那么简单性就很有价值。
它的最新更新是什么?
1.1
A CGI script is a console/shell program. In Windows, when you use a "Command Prompt" window, you execute console programs. When a web server executes a CGI script it provides input to the console/shell program using environment variables or "standard input". Standard input is like typing data into a console/shell program; in the case of a CGI script, the web server does the typing. The CGI script writes data out to "standard output" and that output is sent to the client (the web browser) as a HTML page. Standard output is like the output you see in a console/shell program except the web server reads it and sends it out.
CGI脚本可以在浏览器中执行。URI通常包含提供给CGI脚本的查询字符串。如果方法是“get”,那么查询字符串将在名为QUERY_STRING的环境变量中提供给CGI脚本。如果方法是"post",则使用标准输入将查询字符串提供给CGI Script (CGI Script从标准输入读取查询字符串)。
CGI脚本的早期用途是处理表单。在HTML的初期,HTML表单通常有一个“action”属性和一个指定为“submit”按钮的按钮。当提交按钮被按下时,“action”属性中指定的URI将被发送到服务器,表单中的数据将作为查询字符串发送。如果“action”指定了一个CGI脚本,那么CGI脚本将被执行,然后生成一个HTML页面。
RFC 3875“通用网关接口(CGI)”部分定义了使用C语言的CGI,比如说环境变量“可以通过C库例程getenv()或变量environ来访问”。
如果你正在使用C/ c++开发CGI脚本,并使用Microsoft Visual Studio来完成,那么你将开发一个控制台程序。