CGI在Windows 10上跑起来,是个让人又爱又恨的活儿。爱它的人,多半是从Perl时代熬过来的老骨头;恨它的人,八成刚被Apache的配置折腾到半夜。可说到底,Windows 10下玩CGI,真没你想的那么玄乎。
我上个月刚在一台ThinkPad上搭了个本地环境,用的就是IIS加PHP-CGI。过程不算顺滑,但也没到需要烧香的地步。关键卡点就一个:IIS默认不让你执行exe或脚本,你得手动把CGI模块打开,再把处理程序映射里添上*.php指向php-cgi.exe。就这么两步,能拦住一半新手。剩下的一半,多半栽在权限上——目录的IUSR账号没给读和执行权,页面直接给你吐个500。
你要是图省事,用Python写CGI脚本也行。Windows 10自带的Python不是全的,得去官网装个3.11+。写好的.py文件往cgi-bin一扔,记得首行加#!python,再在IIS里把.py映射到python.exe。跑起来后,浏览器里敲localhost/cgi-bin/test.py,看到Content-Type: text/html后面跟着你的HTML,那感觉跟第一次点亮LED灯差不多。
但别高兴太早。Windows的路径分隔符是反斜杠,CGI环境变量里SCRIPT_FILENAME经常带着C:\inetpub\wwwroot\...这种鬼样子。你写的Perl或者Python代码里,但凡用了正斜杠硬拼路径,准得踩坑。我那次调试了半天,最后发现是open()函数里路径写死了/tmp/,Windows根本没这个目录。换成tempfile.gettempdir()才消停。
还有个坑是编码。Windows 10的默认代码页是GBK,而CGI输出要是UTF-8,浏览器那边直接乱码。你得在脚本里显式print("Content-Type: text/html; charset=utf-8"),再在文件保存时选UTF-8无BOM。BOM这玩意儿,Windows记事本最爱加,加了它,Python的#!/usr/bin/env python这行直接报错——因为BOM被当成字符了。建议用VS Code或Notepad++,别用记事本。
性能上,Windows下的CGI确实比Linux上慢。每次请求都要起一个新进程,PHP-CGI还好,Python起个解释器得花个两三百毫秒。你要是拿它做生产环境,那纯属自虐。但用来学CGI协议、跑点内部工具,完全够用。我就在公司内网搭了个小工具,用Perl读个Excel表格生成报告,同事们用着也没抱怨慢——毕竟一天也就几十次请求。
最后说个野路子。你要是嫌IIS配置麻烦,可以装个XAMPP,Apache在Windows上对CGI支持更直观。改httpd.conf里ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/",再确保AddHandler cgi-script .cgi .pl .py这行没被注释。重启Apache,完事。XAMPP默认把权限都放开了,省心,但别拿去公网裸奔。
Windows 10跑CGI,不优雅,但能跑。你把它当个玩具,它给你惊喜;你把它当生产服务器,它教你做人。反正我那个内网工具已经跑了三个月,没崩过。够本了。