1. Cauzele problemei În atașamentul "Probleme post-lansare" cu statisticile de bug după lansarea unui proiect, există:
Ca acumulare de experiență, aceste probleme, cauze și soluții vor fi incluse în lista de verificare, apoi: Prima întrebare: Este limita superioară a parametrului URL o referință exactă? Care este limita superioară? A doua întrebare: De ce există o limită de date în timpul POST? Limita este de 128K? 2. Analiza problemei 1. Primul: 1) Nu există o limită superioară a parametrilor în URL. Problema este că IE are o limită de lungime pentru URL-uri. 2) Specificația protocolului HTTP nu limitează nici lungimea URL-ului. Această limită este o limitare impusă de un anumit browser și server. Limita IE privind lungimea URL-ului este de 2083 octeți (2K+35). Pentru alte browsere precum Netscape, Firefox etc., nu există o limită teoretică de lungime, iar limita depinde de suportul sistemului de operare. [Ref. 1] 3) "Parametrii de lungime variabilă sunt transmisi prin URL" înseamnă de fapt că metoda GET este folosită la trimiterea formularului, nu metoda POST. Ceea ce cauzează această eroare potențială este utilizarea metodei GET pentru a trimite datele formularului. Pentru că metoda GET transmite datele din URL către server pentru procesare. 4) Rețineți că această limită este întreaga lungime a URL-ului, nu doar valoarea parametrului, lungimea datei. 5) Deoarece este limita IE privind lungimea URL-ului, atât metoda GET, cât și metoda POST au această limitare. (Vă rugăm să consultați documentul aferent pentru detalii despre metodele GET și POST ale FORM [Ref. 2]) Recomandări: 1) Să înțeleagă mediul în care se află aplicația, cum ar fi mediul browserului și serverului aplicației web, și să înțeleagă limitările specifice ale parametrilor acesteia. 2) Folosiți metoda POST cât mai mult posibil pentru a trimite date complexe. Notă: Când FORM nu scrie atributul de metodă, implicit este să se folosească metoda GET. Concluzie (scrie la lista de verificare): Când trimiți date folosind metoda GET, trebuie să iei în considerare limita de lungime a URL-ului de 2083 de octeți în mediul IE. 2. Al doilea: 1) Teoretic, POST nu are limită de mărime. Specificația protocolului HTTP nu are, de asemenea, o limită de dimensiune. 2) "Există o limită de dimensiune de 128K pentru datele POST" nu este suficient de precis, nu există limită pentru datele POST, iar puterea de procesare a procesorului serverului joacă un rol limitativ. 3) Pentru programele ASP, există o limită de 100K de lungime a datelor atunci când obiectul Request procesează fiecare câmp de formular. Dar cu Request.BinaryRead nu există o astfel de limitare. Pentru soluțiile care necesită procesarea a mai mult de 100K date din domeniul formularului, vă rugăm să consultați [Ref. 3] de mai jos. 4) Prin extensie, pentru IIS 6.0, Microsoft a crescut restricțiile din motive de securitate [Ref. 4]. De asemenea, trebuie să acordăm atenție la:
IIS 6.0 are implicit un maxim de 200 KB de date ASP POST, iar limita este de 100 KB per câmp de formular.
Dimensiunea implicită a fișierelor de încărcare din IIS 6.0 este de 4MB.
IIS 6.0 are implicit un antet maxim de cerere de 16KB.
Aceste limitări nu erau disponibile înainte de IIS 6.0. Recomandări: 1) Cunoașterea setărilor implicite ale mediului de rulare te va ajuta să proiectezi și să rezolvi rapid problemele care apar. 2) Versiunea serverului ar trebui luată în considerare. Fiecare versiune a IIS are setări implicite diferite pentru acești parametri, așa că, dacă este necesar, găsește informații și compilează un tabel comparativ. Astfel, există o referință pentru dezvoltare și testare. 3) Aceste limitări ale IIS 6.0 sunt de fapt doar setările sale implicite și le poți modifica în mediul aplicației propriu-zise. În WINNT/system32/inetsrv/MetaBase.xml, definiția implicită este: AspBufferingLimit="4194304" corespunde dimensiunii maxime a fișierului încărcat AspMaxRequestEntityAllowed="204800" corespunde cantității maxime de date din POST ... Concluzie (scrie la lista de verificare): Când folosești ASP, trebuie să iei în considerare că formularul POST are o limită de 100KB per câmp pentru procesarea generală a citirii. Gândește-te dacă să folosești Request.Binary.
|