Pergunta

Existe um máximo documentado para o comprimento dos dados de cadeia que você pode usar no método de envio de um XMLHttpRequest para as grandes implementações navegador?

Eu estou correndo em um problema com um JavaScript XMLHttpRequest pós falha no Firefox 3 quando os dados são mais aproximadamente 3k. Eu estava assumindo o Post iria se comportar o mesmo que um formulário Publicar convencional.

Os documentos do W3C mencionar o param de dados do método de envio é um DOMString mas eu não sei como os principais navegadores implementar isso.

Aqui está uma versão simplificada do meu JavaScript, se bigText é durante cerca de 3k ele falhar, caso contrário, ele funciona ...

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;
        }
    } 
}
Foi útil?

Solução

Eu acredito que o comprimento máximo depende não só no navegador, mas também no servidor web. Por exemplo, o servidor Apache HTTP tem um LimitRequestBody directiva que permite em qualquer lugar de 0 bytes a pena 2GB de dados.

Outras dicas

De acordo com a XMLRPC especificação , os limites única reais são do tamanho de inteiros e duplos.

Você não especificar como ele falhar no entanto a sua codificação é incorreta. Você deve usar encodeURIComponent não encodeURI.

padrão, o tamanho máximo do corpo da solicitação entidade no cliente é provável que apenas limitada pela memória disponível. O servidor como já foi para fora pontas podem rejeitar corpos entidade ao longo de um determinado tamanho. IIS 6 e 7, por exemplo, tem um limite de 200KB padrão.

A configuração para Nginx deve ser feito no client_max_body_size ca ser configurado para qualquer valor ou seja, 20m para 20MiB ou set a 0 para desativá-lo.

vim /etc/nginx/nginx.conf

Salvar e fechar o arquivo, aplicar as alterações para nginx.conf, em seguida, teste-t e e sinal de send -s para recarga:

/usr/sbin/nginx -t
/usr/sbin/nginx -s reload

Sintaxe: tamanho client_max_body_size;

Padrão: client_max_body_size 1m;

Contexto: http, servidor, localização

Define o tamanho máximo permitido do corpo solicitação do cliente, especificado no “Content-Length” campo de cabeçalho de solicitação. Se o tamanho de uma solicitação excede o valor configurado, o 413 (Request Entity Too Large) de erro é devolvido ao cliente. Por favor, esteja ciente de que os navegadores não podem exibir corretamente esse erro. Definir tamanho para 0 desabilita a verificação do tamanho do pedido do cliente corpo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top