游客发表
第一次接触CGI是在大学图书馆的旧书堆里,一本1997年出版的编制《Web开发实战》封面上还贴着“附赠光盘”的标签。作者用整整三章讲Perl写CGI脚本,静态具例子是网页做一个留言板——每次提交表单,服务器就启动一个新进程,两种把数据写进文本文件,编制再吐出一段HTML。静态具当时觉得这玩意儿真原始,网页但转念一想,两种那会儿能动态生成页面已经是编制黑科技了。
说CGI和ASP是静态具“编制静态网页的工具”,其实有点黑色幽默。网页准确讲,两种它们都是编制早期用来生成动态内容的服务端技术,但最终输出到浏览器里的静态具,往往就是一张张静态的HTML页面。CGI全称Common Gateway Interface,严格说它不是一个语言,而是一套接口标准。你可以用C、Perl、Python甚至Shell去写CGI程序。服务器收到请求,就fork一个进程执行你的脚本,脚本把HTML字符串打印到标准输出,服务器再转给浏览器。整个过程像老式打字机——敲一下,动一下,页面才出来。
ASP则是微软1996年推出的Active Server Pages。它把VBScript或JScript嵌在HTML里,服务器(通常是IIS)解释执行,生成纯HTML再发出去。和CGI最大的区别是ASP运行在服务器进程内,不用每次fork新进程,性能好不少。我2002年帮学校机房写过一个选课查询页,就是ASP配Access数据库。代码里混着<% ... %>标记,现在看像考古,但当时跑在Windows NT上,点一下按钮,表格就刷出来了,感觉比CGI利索。
为什么说它们“编制静态网页”?因为无论CGI还是ASP,最终产物都是静态的HTML文本。浏览器收到的就是一堆标签、文字、表格,没有任何服务端逻辑。你查看源代码,看到的就是最终页面。这跟后来的Ajax、React那种前端动态渲染完全两码事。CGI和ASP更像一个“HTML生成器”——你给它参数,它现场拼出一张静态页面给你。拼完就完了,下次请求再重新拼。
有个细节挺有意思:早期很多个人主页的计数器就是CGI写的。一张图片标签<img src="/cgi-bin/counter.pl">,服务器执行脚本,读文件里的数字,加一,再生成一张GIF图返回。浏览器以为这是一张静态图片,其实每次刷新都在变。这种“伪装成静态”的动态,恰恰是CGI和ASP的典型手法。ASP也类似,用Response.Write输出HTML,浏览器端毫无察觉。
2000年前后,CGI因为性能和安全问题(每个请求开进程,容易被打爆)逐渐被mod_perl、FastCGI替代。ASP则演变成ASP.NET,彻底换了内核。但这两样东西留下的遗产很实在:它们教会了一代人“服务端可以生成HTML”这件事。今天你写PHP、JSP、Node.js,本质逻辑还是——服务器把数据塞进模板,吐出静态页面给浏览器。只是进程模型、语言、框架变了。
我书架上还留着一本《CGI编程指南》,封面已经发黄。翻到第87页,有个用C写的小程序,输出一句“Welcome to my homepage”。旁边有人用圆珠笔写了句“太慢了”。确实慢,但那就是静态网页编制工具的起点——笨拙,直接,每个请求都从头拼一张页面。ASP稍微聪明点,知道复用进程,但拼页面的本质没变。现在回头看,它们像两个老木匠,一个用手锯,一个用电动锯,最后交出来的都是一把椅子——静态的,能坐,但不会自己动。
所以别被“动态”这个词骗了。CGI和ASP编制出来的,绝大多数时候就是静态网页。你看到的留言板、计数器、查询结果,浏览器里就是一坨HTML。动态发生在服务器端,发生在那一瞬间的脚本执行里。页面本身,安安静静,像一张打印出来的纸。
```友情链接