Boa服务器返回 502 Bad Gateway .The CGI was not CGI/1.1 compliant. 错误,解决方案

在测试CGI程序时遇到502 Bad Gateway错误,特别是POST请求时。该错误通常由CGI不合规引起。解决方案包括:修改CGI程序权限,确保响应头包含换行符,检查 boa 代码中的 CGI 环境变量,静态编译 CGI 程序,以及可能的 boa 源码修复。针对 uCLinux 平台的问题,可能需要调整 CGI 处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对写的CGI程序进行测试时,进行get请求时没问题,进行post请求时,出现如下错误:

error

一般情况下,CGI程序有问题则会出现上述问题。查了很多网上的帖子,最终发现是自己CGI程序中处理POST请求时的输入流代码有错误,将错误代码进行修改即可解决问题。

总结网上出现这种问题的各种解决方案,以备日后查看:

1、改变CGI程序的权限 chmod 755 或者777 (经常容易被忽略的一个因素)
2、CGI程序中写响应头的时候不能丢了 “\n\n” 两个换行符,可以有以下两种方式输出响应头:

  • printf(“Content-Type:text/html\n\n”);
  • printf(“Content-Type:text/html%c%c”,10,10);

以下转自:http://www.cnblogs.com/hnrainll/archive/2011/06/01/2067266.html
一,在var/www中打开了基本信息设置这个html文件,然后表单内容提交给comment.cgi,又是出现了404,not found,The requested URL /var/www/cgi-bin/comment.cgi was not found on this server。本次问题出在不能用汉字。把html文件中的汉字改成英文后404问题消失。
二,测试cgi时可能出现问题 502 Bad Gateway
The CGI was not CGI/1.1 compliant.
解决:
1,修改boa代码cgi.c,在 complete_env 函数中添加环境变量
my_add_cgi_env(req, “LD_LIBRARY_PATH”, “/lib”),然后重新make即可;
2,编译时加入一个参数,具体如下:
gcc -static test.c -o test.cgi
3,有时原因可能是出在 req->post_data_fd上,在cgi.c的ini_cgi()中,在进行fork()之后,父行程会将 req->post_data_fd关闭设为零,在别的系统中这不会影响到子进程,不过不知道为什么在uclinux下就会出问题,试试把
if (req->method == M_POST)
{
close(req->post_data_fd); /* child closed it too */
req->post_data_fd = 0;
}
里的req->post_data_fd = 0,注释掉看看;
4,boa对实现动态网页的CGI的支持存在一些缺陷,解析CGI应答头时不能完整处理status和location。在此借鉴了http://bbs.chinaunix.net/viewthread.php?tid=824840&pid=5747073&page=1,对整个cgi_header.c进行的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值