1. Cause del problema Nell'allegato "Problemi post-rilascio" delle statistiche dei bug dopo il rilascio di un progetto, ci sono:
Come accumulo di esperienze, questi problemi, cause e soluzioni saranno inclusi nella checklist, poi: La prima domanda: il limite superiore del parametro URL è un riferimento accurato? Qual è il limite superiore? Seconda domanda: perché c'è un limite di dati quando si fa POST? Il limite è 128K? 2. Analisi del problema 1. Il primo: 1) Non esiste un limite massimo di parametri nell'URL. Il problema è che IE ha un limite di lunghezza sugli URL. 2) La specifica del protocollo HTTP non limita nemmeno la lunghezza dell'URL. Questo limite è imposto da un browser e server specifici. Il limite di lunghezza URL di IE è di 2083 byte (2K+35). Per altri browser come Netscape, Firefox, ecc., non esiste un limite teorico di lunghezza, e il suo limite dipende dal supporto del sistema operativo. [Ref. 1] 3) "I parametri a lunghezza variabile vengono passati tramite URL" significa in realtà che il metodo GET viene utilizzato nell'invio del modulo, non il metodo POST. Ciò che causa questo potenziale errore è l'uso del metodo GET per inviare i dati del modulo. Perché il metodo GET passa i dati nell'URL al server per l'elaborazione. 4) Nota che questo limite corrisponde all'intera lunghezza dell'URL, non solo alla lunghezza dei dati del valore del parametro. 5) Poiché è il limite di IE sulla lunghezza URL, sia il metodo GET che il metodo POST hanno questa limitazione. (Si prega di consultare il documento correlato per dettagli sui metodi GET e POST del FORM [Ref. 2]) Raccomandazioni: 1) Comprendere l'ambiente in cui si trova l'applicazione, come l'ambiente browser e server dell'applicazione web, e comprendere i suoi limiti specifici dei parametri. 2) Utilizzare il metodo POST il più possibile per inviare dati complessi. Nota: Quando FORM non scrive l'attributo del metodo, il predefinito è utilizzare il metodo GET. Conclusione (scrivi alla Checklist): Quando si inviano dati utilizzando il metodo GET, è necessario considerare il limite di lunghezza URL di 2083 byte nell'ambiente IE. 2. Il secondo: 1) Teoricamente, POST non ha limiti di dimensione. Anche la specifica del protocollo HTTP non ha limiti di dimensione. 2) "Esiste un limite di dimensione di 128K per i dati POST" non è abbastanza accurato, non c'è limite ai dati POST e la potenza di calcolo del processore del server gioca un ruolo limitante. 3) Per i programmi ASP, esiste un limite di lunghezza dati di 100K quando l'oggetto Request elabora ogni campo del modulo. Ma con Request.BinaryRead non esiste tale limitazione. Per soluzioni che richiedono l'elaborazione di dati del dominio form più di 100K, si prega di consultare [Ref. 3] qui sotto. 4) Per estensione, per IIS 6.0, Microsoft ha aumentato le restrizioni per motivi di sicurezza [Ref. 4]. Dobbiamo anche prestare attenzione a:
IIS 6.0 predefinito ha un massimo di 200 KB di dati ASP POST, e il limite è di 100 KB per campo modulo.
La dimensione predefinita dei file di upload di IIS 6.0 è di 4MB.
IIS 6.0 imposta di default un'intestazione massima di richiesta di 16KB.
Queste limitazioni non erano disponibili prima di IIS 6.0. Raccomandazioni: 1) Conoscere le impostazioni predefinite dell'ambiente di esecuzione ti aiuterà a progettare e risolvere rapidamente i problemi che si presentano. 2) Dovrebbe essere presa in considerazione la versione server. Ogni versione di IIS ha impostazioni predefinite diverse per questi parametri, quindi se necessario, trova informazioni e compila una tabella di confronto. In questo modo, c'è un riferimento per lo sviluppo e i test. 3) Queste limitazioni di IIS 6.0 sono in realtà solo le sue impostazioni predefinite, e puoi modificarle direttamente nell'ambiente applicativo. In WINNT/system32/inetsrv/MetaBase.xml, la definizione predefinita è: AspBufferingLimit="4194304" corrisponde alla dimensione massima del file caricato AspMaxRequestEntityAllowed="204800" corrisponde alla quantità massima di dati in POST ... Conclusione (scrivi alla Checklist): Quando si utilizza ASP, bisogna considerare che il modulo POST ha un limite di 100KB per campo per l'elaborazione generale delle letture. Considera se usare Request.Binary.
|