1. Problemos priežastys Klaidų statistikos priede "Problemos po išleidimo" po projekto išleidimo yra:
Kaip patirties kaupimas, šios problemos, priežastys ir sprendimai bus įtraukti į kontrolinį sąrašą, tada: Pirmas klausimas: ar viršutinė URL parametro riba yra tiksli nuoroda? Kokia yra viršutinė riba? Antras klausimas: Kodėl yra duomenų apribojimas, kai POST? Ar riba yra 128K? 2. Problemos analizė 1. Pirmasis: 1) URL nėra viršutinės parametrų ribos. Problema yra ta, kad IE turi ilgio apribojimą URL. 2) HTTP protokolo specifikacija taip pat neriboja URL ilgio. Šis apribojimas yra konkrečios naršyklės ir serverio nustatytas apribojimas. IE URL ilgio apribojimas yra 2083 baitai (2K+35). Kitoms naršyklėms, tokioms kaip "Netscape", "FireFox" ir kt., teorinio ilgio apribojimo nėra, o jo riba priklauso nuo operacinės sistemos palaikymo. [1 nuoroda] 3) "Kintamo ilgio parametrai perduodami per URL" iš tikrųjų reiškia, kad pateikiant formą naudojamas GET metodas, o ne POST metodas. Šią galimą klaidą sukelia GET metodo naudojimas formos duomenims pateikti. Kadangi GET metodas perduoda URL duomenis serveriui apdoroti. 4) Atminkite, kad šis apribojimas yra visas URL ilgis, o ne tik parametro vertės duomenų ilgis. 5) Kadangi tai yra IE URL ilgio riba, tiek GET metodas, tiek POST metodas turi šį apribojimą. (Daugiau informacijos apie FORM [2 nuoroda] GET ir POST metodus rasite susijusiame dokumente) Rekomendacijos: 1) Supraskite aplinką, kurioje yra programa, pvz., žiniatinklio programos naršyklę ir serverio aplinką, ir supraskite konkrečius jos parametrų apribojimus. 2) Kiek įmanoma naudokite POST metodą, kad pateiktumėte sudėtingus duomenis. Pastaba: Kai FORM nerašo metodo atributo, numatytasis yra naudoti GET metodą. Išvada (parašykite į kontrolinį sąrašą): Pateikdami duomenis naudodami GET metodą, turite atsižvelgti į 2083 baitų URL ilgio ribą IE aplinkoje. 2. Antrasis: 1) Teoriškai POST neturi dydžio apribojimo. HTTP protokolo specifikacija taip pat neturi dydžio apribojimo. 2) "Yra 128K dydžio apribojimas POST duomenims" nėra pakankamai tikslus, nėra jokių apribojimų POST duomenims, o serverio procesoriaus apdorojimo galia vaidina ribojantį vaidmenį. 3) ASP programoms yra 100K duomenų ilgio riba, kai užklausos objektas apdoroja kiekvieną formos lauką. Tačiau naudojant "Request.BinaryRead" tokio apribojimo nėra. Sprendimus, kuriems reikia apdoroti daugiau nei 100 tūkst. formos domeno duomenų, rasite toliau pateiktame [3 nuoroda]. 4) Išplėtus IIS 6.0, "Microsoft" padidino apribojimus saugumo sumetimais [4 nuoroda]. Taip pat turime atkreipti dėmesį į:
IIS 6.0 numatytasis maksimalus 200 KB ASP POST duomenų, o apribojimas yra 100 KB vienam formos laukui.
Numatytasis IIS 6.0 nusiuntimo failų dydis yra 4 MB.
IIS 6.0 numatytoji maksimali užklausos antraštė yra 16 KB.
Šie apribojimai nebuvo taikomi iki IIS 6.0. Rekomendacijos: 1) Žinodami numatytuosius veikiančios aplinkos nustatymus, galėsite suprojektuoti ir greitai išspręsti iškilusias problemas. 2) Reikėtų apsvarstyti serverio versiją. Kiekviena IIS versija turi skirtingus numatytuosius šių parametrų nustatymus, todėl, jei reikia, raskite informacijos ir sudarykite palyginimo lentelę. Tokiu būdu yra nuoroda į kūrimą ir testavimą. 3) Šie IIS 6.0 apribojimai iš tikrųjų yra tik numatytieji nustatymai, kuriuos galite keisti faktinėje programos aplinkoje. WINNT/system32/inetsrv/MetaBase.xml numatytasis apibrėžimas yra: AspBufferingLimit="4194304" atitinka maksimalų įkelto failo dydį AspMaxRequestEntityAllowed="204800" atitinka maksimalų duomenų kiekį POST ... Išvada (parašykite į kontrolinį sąrašą): Kai naudojate ASP, turite atsižvelgti į tai, kad POST formos limitas yra 100 KB vienam laukui bendram skaitymo apdorojimui. Apsvarstykite, ar naudoti Request.Binary.
|