Web设计小组


第1部分:基本问题

本节旨在处理基本问题,解决角色和CGI的性质及其在Web编程中的地位。以下问题/答案只是看起来不“适合”其他部分也可能包括在内在这里。

1.1:什么是CGI?

[来自CGI参考http://hoohoo.ncsa.uiuc.edu/cgi/overview.html]公共网关接口(CGI)是外部的标准与信息服务器(如HTTP服务器)接口的网关程序。Web守护进程检索的纯HTML文档是静态的,这意味着它以不变的状态存在:一个不变的文本文件。另一方面,CGI程序是实时执行的,因此可以输出动态信息。
[目录] [索引]

1.2:它是脚本还是程序?

区别在于语义。传统上,编译的可执行文件(二进制文件)称为程序,而解释程序通常是称为脚本。在CGI的背景下,区别已经变成比以前更加模糊了。这些词经常互换使用(包括在本文件中)。当前的用法倾向于使用“脚本”一词用于CGI程序。
[目录] [索引]

1.3:我什么时候需要使用CGI?

这个答案有无数的警告,但基本上都有包含表单的网页需要CGI脚本或程序处理表单输入。
[目录] [索引]

1.4:我应该使用CGI还是JAVA?

[对这个非问题的回答希望尝试降低反复出现的“CGI vs JAVA”线程]。CGI和JAVA根本不同,对于大多数应用程序不可交换。CGI是一种在WWW服务器上运行程序的协议。而JAVA也可以用于此,甚至有一个标准化的API(servlet、,这确实是CGI的替代品),JAVA在Web用于客户端编程(小程序)。在某些情况下,这两者可以组合在一个应用程序中:例如,JAVA小程序从地理地图,以及处理查询的CGI脚本用于定义的区域。
[目录] [索引]

1.5:我应该使用CGI或SSI还是。。。{PHP/ASP/…}

CGI和SSI(服务器端包含)通常是可交换的,并且可能这只不过是个人喜好的问题。这里有几个指导方针:1) CGI是所有主要HTTPD都同意并支持的通用标准。SSI不是一个通用标准,而是NCSA HTTPD的创新它已被后来的服务器广泛采用。CGI拥有最大的可移植性,如果这是一个问题。2) 如果你的要求足够简单,可以做到如果SSI不调用exec,那么SSI可能会效率更高。典型应用包括网站范围内的“房子风格”,如工具栏、网络场景<body>标签或嵌入的CSS样式表。3) 对于更复杂的应用程序(如处理表单)-在任何情况下都需要执行(运行)程序的地方,CGI通常是最好的选择。4) 如果事务返回的响应不是HTML页面,SSI根本不是一个选项。现在有许多关于SSI主题的最新变体。最著名的可能是嵌入服务器端脚本的PHP在html之前的页面中,ASP是Microsoft版本的类似的界面。
[目录] [索引]

1.6:我应该使用CGI还是API?

API是专有的编程接口,由特定的平台。通过使用API,您将失去所有可移植性。如果你知道您的应用程序只能在一个平台(OS和HTTPD)上运行,它有一个合适的API,继续使用它。否则就坚持使用CGI。
[目录] [索引]

1.7:那么,简单来说,Web服务器编程的选项是什么?

太多了,无法一一列举,但我会尝试总结。简单地说,这里您必须做出以下几个决定:*电源。这是一项复杂的任务吗?*复杂性。它值多少编程人力?*便携性。您可能想在另一个系统上运行程序吗?下面是主要选项的概述。这不可避免地是主观的,但可能对某人有所帮助:基本SSI:用于基本动态内容的简单接口。非标准-阅读服务器文档。增强的SSI[1]:适用于内部更复杂的任务HTML页面。CGI:标准化、可移植的通用API,不限于使用HTML页面。增强的类CGI[2]:通常提高效率但失去可移植性与标准CGI相比。Servlets:JAVA的替代API,它克服了JAVA不支持的局限性环境变量。服务器API:通常是功能最强大、最复杂的选项。[1] 例如,PHP、ASP。[2] 例如,CGI适应了mod_perl或fastcgi。
[目录] [索引]

1.8:我绝对需要知道什么?

如果你已经是一名程序员,CGI非常简单,而且有三种资源可以让你在阅读它们所需的时间内跟上进度:1) HTTPD的安装说明。是否配置为运行CGI脚本,如果是这样的话,它如何确定应该执行URL?(查看您的手册、自述文件、ISP网页/常见问题解答,如果您仍然无法做到找到它请询问您的服务器管理员)。2) NCSA的CGI规范告诉了您所有需要了解的信息使您的程序作为CGI应用程序运行。http://hoohoo.ncsa.uiuc.edu/cgi/interface.html3) WWW安全常见问题解答。这不是“让它工作”所必需的,但如果你想让它继续工作,阅读是必不可少的!http://www.w3.org/Security/Faq/www-Security-Faq.html如果你还不是一个程序员,你必须学习。如果你愿意很难编写“grep”或“cat”实用程序来从命令行,那么您可能会很难使用CGI。制造商在使用CGI尝试之前,请确保您的程序可以从命令行运行,因此,至少已经处理了一个可能的错误源。
[目录] [索引]

1.9:CGI是否会产生新的安全风险?

对。期间。你可以做很多事情来最小化这些。最重要的是要做的是阅读并理解Lincoln Stein出色的WWW安全常见问题解答,请访问http://www.w3.org/Security/Faq/www-Security-Faq.html

[目录] [索引]

1.10:我需要使用Unix吗?

不,但它有帮助。网络,连同互联网本身,C,Perl,以及过去20年中几乎所有的好东西,起源于Unix。在撰写本文时,这仍然是Web应用程序的最成熟和支持最好的平台。
[目录] [索引]

1.11:我必须使用Perl吗?

不,你可以随意使用任何编程语言。Perl只是今天最流行的CGI应用程序选择。其他一些广泛-用于简单任务的语言有C、C++、TCL、BASIC和--甚至是shell脚本。选择Perl的原因包括它强大的文本操作功能(尤其是“正则”表达式)和WWW支持模块可用。
[目录] [索引]

1.12:我应该知道/使用什么语言?

其实并没有那么重要。使用你喜欢的,或你被(如你的经理)限制使用的东西。如果您只是在涉猎编程,那么Perl是一个很好的选择,简单地说就是因为有大量现成的Perl/CGI资源可用。如果你认真对待编程,你应该在家里语言范围。C、 行业标准是必须的(至少对轻松阅读他人代码的程度)。你会当然需要至少一种脚本语言,如Perl、Python或Tcl。C++也是一个好主意。针对Usenet新手的问题:>我很想学习一些CGI编程语言J.M.Ivler写了一些雄辩的智慧之词:>如果你想学习一门编程语言,那就学习一门程序语言。>如果您想学习如何进行CGI编程,请学习编程>语言优先。> >我的书是为数不多的同时涉及两种语言的书之一。>为什么?因为这与语言无关(语言只是逻辑的语法)。>CGI编程是关于编程,以及如何利用经验>用于进入现场或维护现场的人员,或以某种方式>满足一些要求。语言只是这样做的工具。
[目录] [索引]

1.13:我必须把它放在cgi-bin中吗?

参见下一个问题
[目录] [索引]

1.14:我必须叫它*.cgi吗。普勒?

也许 吧。这取决于您的服务器安装。这些类型的文件名是常用的约定,不再赘述。CGI脚本是否已启用,以及(如果是)哪些约定告诉服务器运行或打印它们。如果您正在运行自己的服务器,请阅读手册。如果您在ISP或其他租用的Web空间上,请查看他们的网页信息或常见问题解答。作为最后的手段,请询问服务器管理员。
[目录] [索引]

1.15:什么是“CGI开销”,我应该担心吗?

CGI开销是HTTP成为无状态协议的结果。这意味着每次“点击”都必须初始化CGI流程从浏览器中。在第一个实例中,这通常意味着服务器将新流程。这本身是一个适度的开销,但它可以如果过程发展到问题级别。其次,CGI程序必须初始化。对于编译语言(如C或C++),这可以忽略不计,但是,对于像Perl这样的脚本语言来说,需要付出一点代价。第三,CGI经常被用作后端程序的“粘合剂”,例如数据库,初始化可能需要相当长的时间。这是一项主要的开销,在任何情况下都必须避免严格应用。最常见的解决方案是后端程序作为一个单独的服务器运行,完成大部分工作,同时实际的CGI只是携带消息。第四,一些CGI脚本效率很低,可能占用他们所需资源的数百倍。程序使用system()或“反勾号”符号通常属于这一类。请注意,有一些方法可以减少或消除所有这些间接费用,但这些往往是特定于系统或服务器的。最受支持的服务器可能是Apache,因为商业服务器供应商可能更喜欢推动他们的专有解决方案优先于CGI。
[目录] [索引]

1.16:关于文件权限和“chmod”,我需要了解什么?

Unix系统是为多个用户设计的,包括供应保护您的作品免受其他用户未经授权的访问系统的。文件权限决定允许的用户来处理程序、数据和目录。命令设置文件权限的是chmod。Web服务器通常作为用户“nobody”运行。这意味着,设置除了严重的错误(例如某些版本的Frontpage中的错误扩展名),您的文件绝对安全,不会因Web服务器。这还意味着您可能需要对使服务器能够在CGI上下文中访问它们。有两种运行CGI的方法:-默认情况下,它们以web服务器用户(nobody)身份运行在大多数情况下,这是最安全的,因为您的程序和数据受操作系统保护,不会被未经授权的访问通过CGI中可能的错误。然而,当CGI要写入文件,该文件必须可写入每个web因此完全不受保护。-setuid,它们使用您自己的用户ID运行。这意味着CGI编写的文件是安全的。另一方面,CGI中的任何错误现在都可能危害*服务器上的所有程序和数据。作为基本的安全预防措施,脚本(例如Perl)包括被大多数操作系统阻止运行setuid。“cgiwrap”该程序为此提供了一个解决方案。第三种您应该*永远*不允许运行CGI的方法是:-作为root或setuid root,它们可以作为任何用户运行。这是非常危险的,因为任何错误都可能危害整个服务器,包括每个用户的文件。幸运的是系统管理员可以安装setuid根程序。如果你根本关心安全,确保没有这样的问题程序(尤其是Frontpage扩展)已安装,不管你自己是否使用它们。要获得正确的概述,请参阅“man chmod”。一些可能有用的模式在典型的CGI环境中:*CGI程序,0755*CGI可读的数据文件,0644*CGI使用的数据目录,0755*CGI 0666可写的数据文件(数据绝对没有安全性)*具有写访问权限的CGI使用的数据目录,0777(无安全性)*运行setuid的CGI程序,4755*setuid CGI程序的数据文件,0600或0644*setuid CGI程序使用的数据目录,0700或0755*对于典型的后端服务器进程,4750最后,如果这个答案告诉了你一些你还不知道的事情,甚至不要考虑建立一个安全的服务器!
[目录] [索引]

1.17:什么是CGIWrap,它如何影响我的程序?

[引用自网址:http://www.umr.edu/~cgiwrap/intro.html]>CGIWrap是一个网关程序,允许普通用户使用CGI脚本>和HTML表单,而不会影响http服务器的安全性。>脚本以拥有脚本的用户的权限运行。>此外,对脚本执行了几项安全检查,但不会>如果任何检查失败,则执行。> >CGIWrap通过HTML文档中的URL使用。分布式cgiwrap>配置为运行位于>~/public_html/cgi-bin/目录。请参见网址:http://www.umr.edu/~cgiwrap/

[目录] [索引]

1.18:如何解码表单中的数据?

HTTP请求中数据的正常格式是URL编码的。所有表单数据以字符串形式编码param1=value1&param2=value2&。。。paramn=值许多非字母数字字符在编码中被“转义”:十六进制数为“XY”的字符将由字符串“%XY”。解码这个字符串是每个CGI库的基本功能。另一种格式是“multipart/form-data”,也称为“文件上传”。您将从HTML标记中获得此信息<form method=“POST”enctype=“多部分/表单数据”>(但请注意,在任何情况下都必须接受URLencoded输入,因为浏览器支持多部分表单)。大多数(?)CGI库将透明地处理此问题。
[目录] [索引]

主页,论坛,参考,工具,常见问题解答,文章,设计,链接

版权© 1996 - 2006.网页设计组保留所有权利。