在javascript中发明了几年,称为公共网关接口(CGI)的规范使能为网页的早期交互式形式。但是,虽然JavaScript在浏览器中执行了交互式任务(即,在客户端),CGI脚本通过服务器(服务器端)上的外部程序运行。在服务器上执行CGI脚本后,结果将发送回始发网页作为HTML代码。因此,虽然CGI脚本不是浏览器中的动态组件,但像JavaScript一样,它确实允许1993年和1994年的早期网络用户运行交互式程序。然后,在很多方面,它是CGI - 而不是JavaScript - 这是Web应用程序的开始。
CGI于1993年在国家超级计算申请中心(NCSA)的中心发明,其中开创性的马赛克网络浏览器也起源于此。 Rob McCool在撰写CGI规范中,作为从他的工作中创建NCSA HTTPD的后续行动 - 世界上第一个Web服务器之一以及开源Apache Web服务器的直接祖先。
这个想法是为各种Web服务器创建一个常见规范(其他有效的1993年包含Tim Berners-Lee的Cern Httpd和Tony Sanders'Plexus Server),以便通过网页启动的软件程序可以在任何服务器上运行并发送结果回网页。
“我花了一些时间为Server-Gateway接口编写一个正式规范。我邀请任何和所有评论和建议。这是公共网关协议或CGP的初步规范。此规范定义的版本将是CGP / 1.0。“
几天后,在邮件列表中的一些初步反馈后,McCool写道:
“我在考虑它,这并不是一个协议,而是一个界面。你们都认为将它更改为CGI / 1.0?“
在对术语“网关”一词的次要呼噜之后,MCCOOL澄清说,它提到了“外部服务器程序的接口,允许您与服务与通常可以访问的服务接口。”
更具体地,它被称为将Web服务器连接到遗留信息系统 - 例如数据库。因此,执行CGI程序的服务器是允许来自(例如)用于在网页上使用的数据库的信息的“网关”。换句话说,CGI告诉Web服务器如何将数据传递给应用程序。
在现代术语中,我们可以将CGI视为应用程序编程接口(API)。因此,在这种情况下,随着一个教程所说,“CGI是Web服务器的API。”
在1993年12月初,MCCOOL将“将CGI规范写入一组HTML文档,在网址http://hoohoo.ncsa.uiuc.edu/cgi/。”虽然该网页长期以来,Webs Handback Machine从1997年4月开始副本。我们可以看到McCool如何为世界定义CGI:
“公共网关接口或CGI是外部网关程序的标准,用于与信息服务器(如HTTP服务器)接口。”
在伴随的介绍中,MCCOOL声称,“你可以挂钩的东西真的没有限制,但他添加了一个注意事项:
“你唯一需要记住的是,无论你的CGI计划做什么,它都不应该花太长时间来处理。否则,用户只会盯着他们的浏览器等待发生的事情。“
因为CGI脚本是可执行的,所以它们通常被放置在一个特殊文件夹中。随着MCCOOL解释的,这是“所以Web服务器知道要执行程序而不是仅将其显示给浏览器。”这也使Web Masters能够锁定文件夹,以防止人员创建潜在的危险CGI脚本。 McCool建议文件夹名称CGI-BIN,这很快成为常态。在90年代后来,它变得很常见,以了解类似的网址,如http://www.example.com/cgi-bin/hocloWorld.pl。
MCCOOL的规范CGI / 1.1很快将由万维网的早期用户使用。开发人员可以使用任何编程语言来编写CGI脚本的事实有助于编写CGI脚本。 McCool列出了他的介绍中的一些:
实际上,许多CGI应用程序都以脚本语言编写,Perl(这部分是为什么他们被称为CGI脚本)。实际上,Perl对CGI的创建有很大影响,如openSource.com上的Michael Stevenson的2016年文章所解释的。他引用了Jim Davis的网关到U MICH Geography Server,于1992年11月发布到WWW-Talk邮件列表:
“戴维斯的脚本是用perl编写的,是一种原始Web API,基于格式化的用户查询从另一台服务器中拉入数据。”
CGI的第一个用例是,不陈旧,专注于将应用程序连接到数据库。因此,CGI被用来创建与联系人表单,留言簿,调查或搜索框等类似的东西。任何必需用户输入的内容,提示从网页到数据库的往返并再次返回网页,是CGI使用的好候选者。
以下是1994年在堪萨斯大学写的介绍性文章中解释的上图:
“在该图中,在计算机A上运行的Web客户端从计算机B上运行的某些Web服务器获取表单。它显示表单,用户进入数据,并且客户端将输入的信息发送到在计算机C上运行的HTTP服务器。在那里,数据被交出到CGI程序,准备文档并将其发送到计算机A上的客户端。然后,客户端将显示该文档。“
类似于JavaScript,可以通过非程序员复制和粘贴到网站上的CGI脚本。因此,如果您需要联系表单,则在找到一个启用的CGI脚本之前,您可以搜索。通常它是一个perl脚本,随着时间的推移网站,就像Matt的脚本存档一样出现以提供这些代码片段。
Matt Wright是科罗拉多州柯林斯堡的高中生,当时他于1995年开始了Matt的脚本归档。他最受欢迎的脚本之一是一个名为formmail的联系表单,它被用perl编写并描述为“通用HTML表单” -mail网关解析任何形式的结果并将它们发送到指定的用户。“不幸的是,Formmail本身是不安全的,很快被垃圾邮件发送者剥夺了垃圾邮件。
Formmail在早期突出了CGI脚本的问题:因为通过设计启用随机网络用户来运行服务器上的程序,如果笨拙地写入,这些脚本很容易被攻击。如果若有数其他网站所有者然后复制并粘贴相同的代码,它将成为一个广泛的安全问题(由Formmail发生)。作为计算机编程论坛的用户,相当钝化,在讨论Wright的脚本中:
“......无大多数人下载和实施这些脚本的人没有他们自己的编程知识,因此,”幸福“是”幸福“的安全风险,Y2K错误以及频繁的完全缺乏正确的错误处理。”
最终,Perl社区的成员开始了一个网站,呼吁马特脚本,为Wright越来越受欢迎的CGI脚本提供替代方案。该网站是2004年最后更新的。有趣的是,Matt的剧本存档持续了五年(尽管它现在包括安全警告)。
20世纪90年代中期的Web开发主题之一,我在以前的关于Netscape和Microsoft的帖子中探讨的是,Web应用程序的复杂性越来越复杂。前端(Web浏览器)越来越多地连接到后端技术,包括Microsoft的情况下的操作系统。到1997年,Netscape正在推动一个名为“Crossware”的概念(Marc Andreessen被定义为“跨网络和操作系统运行的按需应用程序”),而且同时微软正在构建其Windows集成的ActiveX技术。
但是,CGI通过提供通过网页访问后端功能的简单方法,以多种方式路由到复杂性。 “Gateway”真的只是 - 从浏览器到服务器的虚拟管道,执行脚本,然后将结果发送回浏览器。这种简单性使能有影响力的20世纪90年代网站,如雅虎!,eBay和Craigslist蓬勃发展,而不需要购买Netscape或Microsoft对网络的愿景。
但是网上发展的另一个主题是事情不会留在很长时间! 1994年出现了基于CGI的新脚本语言:PHP,最初站在“个人主页工具”中。随着时间的推移,PHP在许多情况下成为Perl CGI脚本的替代品。我将在本系列的下一篇文章中深入了解了关于服务器端Web开发的故事。