Pergunta

Eu tenho um pequeno problema (ou talvez não tão pequenos) com alguns sites ASP.NET/Castle Monotrilho por um trabalho do produto I por diante. Este é um sistema bastante legado (bem escrito antes do meu tempo), e usa requisições GET com uma quantidade considerável de informações na cadeia de consulta. Recentemente correr em limitações de comprimento de seqüência de consulta, e para a quantidade de dados que precisamos para transferência para o servidor, armazenando os dados temporariamente em um cookie também não é plausível (já estamos bem passado o limite de 4096 bytes por cookie, e nós definir um monte de cookies, por isso estamos provavelmente perto ou no limite de cookies por domínio também.)

Eu estou querendo saber se existem alternativas, além de POST (em alguns casos, a mudança para uma solicitação POST pode ser possível, mas provavelmente não em todos), que pode resolver este problema. Eu estou esperando que alguém aqui na StackOverflow foi executado em problemas semelhantes, e tem alguma solução wizardly (ou seja, comprimir dados com javascript, codificar como base64, passar para um único item string de consulta? Só não sei se existem bibliotecas que podem compressa dados com JavaScript de uma maneira compatível com embutido classes de compressão em NET 3.5.)

UPDATE:

Solução Acabei escolhendo era POST a um controlador temporária. Este controlador de temperatura puxou a grande lista de dados, preso em uma sessão compartilhada (os servidores de produção estão em um farm de servidores multi-grande banco que não usar pegajosas sessões / IPS), e realizou um GET para o controlador de reais, o que puxou os dados da sessão compartilhada. Não a solução mais alto desempenho, mas resolveu o problema.

Foi útil?

Solução

Existem vários Base64 codificar plugins para jQuery , mas que não ajuda, porque Base64 geralmente torna os dados mais , não menor.

Dependendo dos dados, eu olhar para algumas outras técnicas de compressão de texto. listas Wikipédia alguns :

  • Contexto método Árvore de peso (CTW)
  • Método de Burrows-Wheeler (bloco de triagem pré-processamento que faz compressão mais eficiente)
  • LZ77 (usado por DEFLATE)
  • LZW

Aqui está um LZW implementação para Javascript .

Huffman codificação é baseado em freqüência da letra, por isso pode não ser apropriado para seus dados. Você provavelmente vai ter que escapar o resultado para torná-lo URL-safe.

Outras dicas

Além de mudar para postar suas opções vão ser limitado. Base64 vai aumentar o tamanho dos dados não diminuí-la. Você menciona comprimir os dados em um único item string de consulta ... talvez em vez disso você poderia dividir os dados em 2 pedidos separados usando Ajax? Eu não tenho certeza se isso é viável para a sua situação, no entanto.

Gostaria de sugerir usando JSON como formato de transferência de dados se uma matriz como string de consulta é gerado o seguinte:

params[]=sth&params[]=sth2&params[]=sth3

Este seria

{params:['sth1', 'sth2', 'sth3']}

Você pode sssign esta string JSON a uma variável única letra como abaixo

p={params:['sth1', 'sth2', 'sth3']}

Algo ainda melhor seria a compressão e codificação Base64 toda a cadeia de consulta. Desde que você gerar a string de consulta no lado do servidor (eu assumo isso, mas mesmo pode ser feito em JS usando os mesmos algoritmos comp / decomposição) você pode usar qualquer algoritmo de compressão embutido com sua linguagem de programação como o gzip. Depois Base64 codificar os dados compactados, sim ele irá expandir um pouco, mas não tanto como a codificação url expande-lo.

Eu não confie muito em javascript. Compactar a string de consulta seria a primeira coisa natural a fazer; mas se você está muito à frente desses limites, você deve tentar mentaining sessões. Você começa-se fresco com informações estado padrão, em seguida, refletir gradualmente o estado no servidor para a sessão do usuário com dados POST fornecidas, para que particionar todos esses dados em muitos manipuladores (páginas lidas).

A resposta livro é usar POST. Por que isso não seria possível? A razão POST foi inventado era muito bonita, para contornar os limites de comprimento em GET.

Outra possibilidade dependendo dos detalhes é ter várias telas, cada um com um subconjunto dos dados e armazenar os dados de cada no servidor e conectá-los no final.

é a limitação string de consulta no cliente ou o servidor?

Se o problema é apenas que o cliente não irá enviar a string GET tempo, talvez você pode enviar para um servidor proxy que encaminha a solicitação como um GET.

É este à informação estado de retenção entre as páginas? Se assim for, uma opção poderia ser a de usar um cookie com o seu valor de um GUID como tal:

_SESSIONID=3F2504E0-4F89-11D3-9A0C-0305E82C3301

e armazenar o server-side informações de sessão. A sessão é identificado exclusivamente com um GUID, por isso, é então fácil para recuperar a grande quantidade de informações diretamente no servidor.

Tudo o que você precisa então de enviar / recuperar do lado do cliente é que id de sessão, bem como cliente informações geradas (campos GET / POST).

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