代码之家  ›  专栏  ›  技术社区  ›  Jayson

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

  •  1
  • Jayson  · 技术社区  · 15 年前

    我尝试使用Ajax发布一个HTTP请求,但是使用modsec-audit从Apache服务器得到一个响应:“post-request必须有一个content-length头。”我不想在modsec-audit中禁用它。

    这只发生在Firefox中,而不是IE中。更进一步的说,我切换到使用一个帖子,而不是让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 回复  |  直到 15 年前
        1
  •  3
  •   PatrikAkerstrand    15 年前
    xhr.setRequestHeader("Content-Length", "0");
    

    这是我的最佳猜测。

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

    var RequestString = 'someserverscript.cfm' + SearchString + '&random=' + Math.random();
    
        2
  •  0
  •   Alex Polo    15 年前

    尝试实际发送一些内容而不是空(xhr.send(null);)。