2008-09-24 8 views
8

Czy istnieje udokumentowana maksymalna długość danych ciągu, których można użyć w metodzie wysyłania XMLHttpRequest dla głównych implementacji przeglądarki?Maksymalna długość parametru data wysyłania() w XMLHttpRequest Post

Występuje problem z postem JavaScriptHttpRequest JavaScript w FireFox 3, gdy dane mają ponad 3k. Zakładałem, że Post zachowa się tak samo, jak zwykły Post Post.

Dokumenty W3C wspominają o parametrze danych metody send to DOMString, ale nie jestem pewien, w jaki sposób główne przeglądarki ją implementują.

Tutaj jest uproszczoną wersją mojego JavaScript, jeśli bigText wynosi ponad około 3k to się nie powiedzie, to działa inaczej ...

var xhReq = createXMLHttpRequest(); 

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

function mySubmit(id, bigText) { 
    var url = "SubmitPost.cfm"; 
    var params = "id=" + id + "&bigtext=" + encodeURI(bigText); 

    xhReq.open("POST", url, true); 

    //Send the header information along with the request 
    xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xhReq.setRequestHeader("Content-length", params.length); 
    xhReq.setRequestHeader("Connection", "close"); 

    xhReq.onreadystatechange = onPostSubmit; 
    xhReq.send(params); 
} 

function onPostSubmit() { 

    if (xhReq.readyState==4 || xhReq.readyState=="complete") 
    { 
    if (xhReq.status != 200) 
     { 
     alert('BadStatus'); 
     return; 
     } 
    } 
} 

Odpowiedz

5

wierzę maksymalna długość nie zależy tylko od przeglądarki, ale również na serwer internetowy. Na przykład serwer HTTP Apache ma numer LimitRequestBody directive, który pozwala od 0 do 2 GB danych.

2

Zgodnie z XMLRPC spec, jedyne rzeczywiste ograniczenia dotyczą rozmiaru liczb całkowitych i podwójnych.

2

Nie określasz, jak to się nie uda, ale kodowanie jest niepoprawne. Powinieneś użyć encodeURIComponent nie encodeURI.

Domyślnie maksymalny rozmiar ciała podmiotu docelowego na kliencie jest prawdopodobnie ograniczony tylko przez ilość dostępnej pamięci. Serwer, jak już wskazano, może odrzucić obiekty encji o pewnej wielkości. Na przykład IIS 6 i 7 mają domyślny limit 200 KB.