2009-06-30 2 views
1

Ich versuche, eine http-Anfrage mit Ajax, aber eine Antwort von der Apache-Server mit modsec_audit, dass: "POST-Anfrage muss eine Content-Length-Header haben." Ich möchte das in modsec_audit nicht deaktivieren.Wie erzwinge oder füge ich die Inhaltslänge für AJAX-POST-Anfragen in Firefox hinzu?

Dies tritt nur in Firefox, und nicht IE. Außerdem habe ich einen POST anstelle eines GET verwendet, um zu verhindern, dass der IE meine Ergebnisse zwischenspeichert.

Dies ist eine vereinfachte Version des Codes, den ich für die Anfrage verwende, ich benutze kein JavaScript-Framework.

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; 
} 

Wie erzwinge oder ersetze ich die Inhaltslänge für AJAX-POST-Anfragen in Firefox?

Antwort

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

würde meine beste Vermutung sein.

BTW, wenn Sie Caching wollen in IE stoppen, fügen Sie einfach eine Zufallszahl auf das Ende, wie in:

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

Mann, das war zu einfach; Ich hätte das selbst herausfinden sollen. setRequestHeader() funktioniert jedoch nicht ordnungsgemäß, es sei denn, Sie ersetzen null durch '' in send(). – Jayson

0

Versuchen Sie tatsächlich etwas statt null (xhr.send (null) zu senden;).

Verwandte Themen