如何在Firefox中强制或添加ajax类型POST请求的内容长度?

时间:2009-06-30 20:09:50

标签: javascript ajax firefox http-headers

我正在尝试使用ajax发布http请求,但是使用modsec_audit从apache服务器获取响应:“POST请求必须具有Content-Length标头。”我不想在modsec_audit中禁用它。

这只发生在firefox中,而不是IE中。此外,我切换到使用POST而不是GET来阻止IE缓存我的结果。

这是我用于请求的代码的简化版本,我没有使用任何javascript框架。

function getMyStuff(){
    var SearchString = '';
    /* build search string */
    ...
    /* now do request */
    var xhr = createXMLHttpRequest();
    var RequestString = 'someserverscript.cfm' + SearchString;
    xhr.open("POST", RequestString, true);
    xhr.onreadystatechange = function(){
        processResponse(xhr);
    }
    xhr.send(null);
}


function processResponse(xhr){
    var serverResponse = xhr.responseText;
    var container = document.getElementById('myResultsContainer');
    if (xhr.readyState == 4){
        container.innerHTML = serverResponse;
    }
}

function createXMLHttpRequest(){
    try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
    try { return new XMLHttpRequest(); } catch(e) {}
    return null;
}

如何在Firefox中强制或添加ajax类型POST请求的内容长度?

2 个答案:

答案 0 :(得分:3)

xhr.setRequestHeader("Content-Length", "0");

将是我最好的猜测。

顺便说一句,如果你想在IE中停止缓存,只需在末尾添加一个随机数,如:

var RequestString = 'someserverscript.cfm' + SearchString + '&random=' + Math.random();

答案 1 :(得分:0)

尝试实际发送一些东西而不是null(xhr.send(null);)。