cgi文件返回HTTP状态码、设置Cookie、读取环境变量的记

2019-03-22  本文已影响0人  苍蝇的梦

2019-03-22 遇到的一点小问题

function loadXMLDoc(){
    var xmlhttp;
    if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");// IE6, IE5 
    }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 ){
            if(xmlhttp.status==200){
                var jsonObj = window.JSON.parse(xmlhttp.responseText);//解析json文件
                document.getElementById("show_message").innerHTML=jsonObj.wannoo.test[0];
            }else{
                document.getElementById("show_message").innerHTML=xmlhttp.status;
            }
        }
    }
    xmlhttp.open("GET","./wannoo.cgi",true);
    xmlhttp.send();
}

最近在做机器的web管理界面,有一个功能需要cgi文件返回HTTP状态码。网上查了一下,发现只要在第一句写上echo "Status:404"就可以了。不过在HTTP请求时,虽然返回设置的状态码,但后面的代码还是有照样执行,也能正常显示JSON信息
)。而且如果是直接打开cgi文件,浏览器也不会自动跳转错误界面。需要在浏览器的开发工具里才能看到。

#!/bin/sh

result=`cat ./wannoo.json`
echo "Status:404"
echo -e "Content-type: text/plain;charset=utf-8\n"
echo "$result"

然后上面的cgi文件写法还有一个问题,就是如果上面的shell出现错误,是没办法在html页面上显示错误信息的。只有shell命令正常执行的时候才会显示。这个要注意位置,把返回值写第一句。

#!/bin/sh

echo "Status:404"
#cgi文件设置Cookie的方法
echo "Set-Cookie: name=wannoo"
echo -e "Content-type: text/plain;charset=utf-8\n"
result=`cat ./wannoo.json`
echo "$result"

当然了,如果不方便放第一句,也是有方法的。就是使用Linux的标准输出。这样也就能显示错误信息了。

result=`cat ./wannoo.json 2>&1`
执行正常 执行出现错误 执行出现错误但没有显示出来
然后今天查资料发现cgi有些环境变量,可以很方便地获取一些信息。比如echo "$SERVER_NAME"可以直接显示出收到请求的服务器的主机名称
上一篇下一篇

猜你喜欢

热点阅读