我的问题是关于CGI。我想知道如果我将Perl脚本保存为.cgi文件,那么让服务器知道它是Perl脚本而不是其他的实际机制是什么?我知道在源文件开头有一个#!/usr/local/bin/perl
,但这也是Perl编程语言的一部分,所以服务器在开始执行之前必须知道它是一个Perl脚本。Web服务器如何解释“.cgi”?
回答
如果服务器配置为识别.cgi
后缀,那么它只是执行该文件,可能使用exec*()
functions之一。
在类Unix系统上,如果文件是以#!
开头的文本文件,那么系统内核本身将使用该行来确定启动哪个解释器来将该文件作为脚本运行。你可以用任何解释语言(Perl,Python,bash,sh,ruby等等)编写CGI脚本。
对于这个问题,您可以使用任何可执行文件作为CGI
脚本
程序。如果编译一个C,C++或Ada程序来创建一个可执行文件,然后将其安装在文件名后缀为.cgi
的适当目录中,则Web服务器可以直接执行它。这并不常见,因为脚本语言对于这类事情往往会变得很方便,但Web服务器并不关心它调用的是哪种可执行文件,或者内核如何调用它。
(细节可能会有点不同的Windows上,通常使用文件扩展名来确定如何启动一个可执行文件。)
请解释downvote;我想提高我的答案。 – 2012-07-30 18:13:10
一个HTTP服务器通常只给send指定文件给客户端。服务器的配置决定将运行哪些文件并返回其输出。
例如,流行的Apache httpd服务器的配置文件是httpd.conf
,或者具体来说是其中的一个文件Include
d。它随软件版本,主机操作系统和分配而变化很大。
的标准可以或者基于其中文件在文件结构,或者是它的名是。
一个ScriptAlias指令像
ScriptAlias /cgi-bin
说,在/cgi-bin
目录中的所有文件将作为CGI脚本来处理。
或者,AddHandler指令像
AddHandler cgi-script .cgi
说,和.cgi
扩展名的文件将被运行的CGI脚本无论他们在哪里。
这并没有回答这个问题:“让服务器知道它是Perl脚本而不是别的什么是真正的机制?” – 2012-07-30 16:22:09
@brian:我认为“服务器如何知道它是CGI脚本而不是文本资源”。也许我错了。希望OP会告诉我们。 – Borodin 2012-07-30 16:32:23
- 1. Web服务中的代码解释器
- 2. CGI脚本Python的Web服务器
- 3. CGI和.NET Web服务
- 4. 如何设置Python CGI服务器?
- 5. 一个Apache服务器[CGI]
- 6. CGI/Python服务器推送
- 7. 设置服务器端解释器
- 8. Delphi 7 CGI Web服务全局参数
- 9. 用于Socket.IO解释的Node.js服务器?
- 10. Asp.net服务器端代码块解释
- 11. 服务器到服务器Web服务
- 12. Web服务器 - 如何解析请求?异步流标记器?
- 13. 解析/解释从PHP中的Web服务检索到的XML
- 14. Android cgi web服务器写入文件并加载perl脚本
- 15. 从Web服务器向CGI/FastCGI流程发送HTTP请求
- 16. C#PHP-CGI - 调用phpinfo崩溃web服务器
- 17. 如何解决Java Web服务问题?
- 18. 如何解释Windows任务管理器?
- 19. 如何解释Apache服务器的访问日志?
- 20. Web服务的服务器
- 21. Web服务TCP服务器
- 22. Web服务器
- 23. 如何告诉R解释器如何使用代理服务器?
- 24. Web服务器到android XML解析
- 25. 解析XML Web服务器从vb.net
- 26. 了解PHP如何在服务器上运行(CGI或fastCGI或mod_php)
- 27. 如何验证服务器端Web服务的浏览器IP
- 28. 没有服务器的CGI脚本
- 29. 调试服务器的CGI程序
- 30. HTTP服务器和CGI处理
的'#!'就是不使用Perl的一部分。它被称为“shebang”。这是一种用于任何类型文本“脚本”的Unix约定。 – Mat 2012-07-29 15:47:16
那么如果我想在其他操作系统中使用cgi呢? – 2012-07-29 15:48:31
取决于网络服务器。可以将其配置为将.cgi文件作为perl处理,或者它已经读取了第一行来尝试并确定它是什么类型的文件。 – Mat 2012-07-29 15:49:28