Site icon David Yin's Blog

Http Header Error again in MovableType 3.31

I met the Http Header error during upgrade to MovableType 3.2. I use my own cgi files to replace the original files and solved this problem.
This time, when I upgrade from MovableType 3.2 to MovableType 3.31, something happen.
The test bed is Windows 2003, IIS web server. I install the MovableType in the mtcgi path, not in the root. So the problem comes again as below.

CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers.

I use another way to solve this problem. As I mentioned in the Perl ISAPI Vs Perl.exe (Chinese), I use the ISAPI to ren the perl files.


1) Control Panel > Administrative Tools > IIS manager
2) Right Click on your site, choose Properties.
3) Under Home Directory tab, click configuration.
4) Under App Mappings tab, choose .cgi from the extension list. Click Edit button.
5) Change Executable field from “e:\Perl\bin\perl.exe “%s” %s” to “e:\Perl\bin\perlis.dll”.

The difference of above is as below:

Why should I use Perl for ISAPI rather than Perl for Win32 (perl.exe)?
The short answer is: it’s faster. The long answer gets kind of technical, but it goes like this:
The main advantage of PerlIS over perl.exe is that PerlIS runs as a DLL in the web server’s process space. Because Win32 platforms set up a protected memory space for each process that is started, there’s a lot of overhead in starting a new process or program. Passing scripts to an interpreter, such as perl.exe, requires starting a new process for every script, which gets expensive in terms of system resources.
DLLs, on the other hand, don’t need their own process space; they use the space of the process that calls them. They don’t require nearly as much overhead to start, and once loaded they stay loaded until the calling process ends. PerlIS therefore runs Perl scripts with a quicker turn-around time than perl.exe.
Extra care should be taken when you write PerlIS applications. It is difficult to crash the web server using CGI, but because the PerlIS DLL runs in the process space of the server, your web server is more susceptible to crashes and hangs caused by programming errors.

This problem is only found in Windows 2003. I tried it in Windows 2000, XP. All fine.
If you have same problem and solve it by my way, please leave your comment below.

Exit mobile version