CGI的C程序给出错误不完整的HTTP标头

时间:2011-12-31 05:20:31

标签: c cgi iis-5

我的C程序代码:

#include <stdio.h>
int main(void) {
  printf("Content-Type: text/plain;charset=us-ascii\n\n");
  printf("Hello world\n\n");
  return 0;
}

我使用以下命令编译了几次:

gcc -o first.cgi first.c
gcc first.c -o first.cgi
g++ first.c -o first.cgi

当我在网络中使用first.cgi时,会出错:

  • CGI错误

    指定的CGI应用程序因未返回完整的HTTP标头集而行为不端。它返回的标题是:
    J:\ KKS_Sawdagger \ cgi-bin \ first.cgi第1行无法识别的字符\ x90。

有人可以给我理由吗?

1 个答案:

答案 0 :(得分:4)

一种可能性是HTTP要求以CRLF结尾的行("\r\n");事实上,使用线路的大多数互联网协议也是如此。

现在,有一些缓解措施可能适用于您的代码。 C标准表示文本流应该在输入时从本地本地行结尾转换为\n,在输出时从\n转换为本地本地行结尾。问题是“是stdout是文本流还是Windows上的二进制流?”这是一个我不知道答案的问题(但“文本”是一个合理的猜测 - 在这种情况下代码应该在Windows上正常工作。)

由于错误消息将问题标识为字节0x90(代码中未显示),因此此处可能还有其他内容。你自己直接运行程序吗?

在Windows上,可执行文件的扩展名不是.exe吗?可能是cmd.exe或其他一些命令解释器被赋予你的程序解释为某种类型的脚本,并且它不太喜欢它。 (也就是说,ISTR,Windows上的GCC添加了.exe后缀,因此编译的实际输出为first.cgi.exe。)