|
|
Opublikowano 08.03.2018 10:18:07
|
|
|
|

1. Przyczyny problemu W załączniku "Post-Release Problems" do statystyk błędów po wydaniu projektu znajdują się:
Jako nagromadzenie doświadczeń, te problemy, przyczyny i rozwiązania zostaną uwzględnione na liście kontrolnej, a następnie: Pierwsze pytanie: Czy górna granica parametru URL jest dokładnym odniesieniem? Jaki jest górny limit? Drugie pytanie: Dlaczego istnieje limit danych podczas POST? Czy limit to 128K? 2. Analiza problemu 1. Pierwsze: 1) W URL-u nie ma górnej granicy parametrów. Problem polega na tym, że IE ma limit długości adresów URL. 2) Specyfikacja protokołu HTTP również nie ogranicza długości adresu URL. To ograniczenie jest narzucone przez konkretną przeglądarkę i serwer. Limit długości URL w IE wynosi 2083 bajty (2K+35). W przypadku innych przeglądarek, takich jak Netscape, FireFox itp., nie ma teoretycznego limitu długości, a jego limit zależy od wsparcia systemu operacyjnego. [Ref. 1] 3) "Parametry o zmiennej długości są przekazywane przez URL" oznacza, że przy wysyłaniu formularza używa się metody GET, a nie metody POST. Przyczyną tego potencjalnego błędu jest użycie metody GET do przesyłania danych z formularza. Ponieważ metoda GET przekazuje dane z adresu URL do serwera do przetwarzania. 4) Należy zauważyć, że ten limit dotyczy całej długości URL, a nie tylko wartości parametru. 5) Ponieważ jest to ograniczenie długości URL w IE, zarówno metoda GET, jak i POST mają to ograniczenie. (Prosimy o zapoznanie się z powiązanym dokumentem, aby uzyskać szczegóły dotyczące metod GET i POST w FORM [Ref. 2]) Rekomendacje: 1) Zrozumieć środowisko, w którym znajduje się aplikacja, takie jak przeglądarka i środowisko serwerowe aplikacji webowej, oraz zrozumieć jej specyficzne ograniczenia parametrów. 2) Używaj metody POST tak często, jak to możliwe, aby przesyłać złożone dane. Uwaga: Gdy FORM nie zapisuje atrybutu metody, domyślnie stosuje się metodę GET. Podsumowanie (napisz do listy kontrolnej): Przesyłając dane za pomocą metody GET, musisz wziąć pod uwagę limit długości URL wynoszący 2083 bajty w środowisku IE. 2. Drugie: 1) Teoretycznie POST nie ma limitu rozmiaru. Specyfikacja protokołu HTTP również nie ma ograniczenia rozmiaru. 2) "Limit rozmiaru 128K dla danych POST" nie jest wystarczająco dokładny, nie ma ograniczenia dla danych POST, a moc obliczeniowa procesora serwera odgrywa rolę ograniczającą. 3) W przypadku programów ASP istnieje limit długości danych do 100K, gdy obiekt Request przetwarza każde pole formularza. Ale w przypadku Request.BinaryRead nie ma takiego ograniczenia. W przypadku rozwiązań wymagających przetwarzania ponad 100K danych domenowych formularzy, prosimy o kontakt z [Ref. 3] poniżej. 4) W rozszerzeniu, dla IIS 6.0, Microsoft zwiększył ograniczenia ze względów bezpieczeństwa [Ref. 4]. Musimy także zwrócić uwagę na:
IIS 6.0 domyślnie stosuje maksymalnie 200 KB danych ASP POST, a limit wynosi 100 KB na pole formularza.
Domyślny rozmiar plików uploadu w IIS 6.0 to 4MB.
IIS 6.0 domyślnie przyjmuje maksymalny nagłówek żądania 16KB.
Te ograniczenia nie były dostępne przed IIS 6.0. Rekomendacje: 1) Znajomość domyślnych ustawień środowiska działającego pomoże Ci zaprojektować i szybko rozwiązywać pojawiające się problemy. 2) Należy rozważyć wersję serwerową. Każda wersja IIS ma inne domyślne ustawienia tych parametrów, więc jeśli to konieczne, znajdź informacje i sporządź tabelę porównawczą. W ten sposób istnieje odniesienie do rozwoju i testowania. 3) Te ograniczenia IIS 6.0 to w rzeczywistości jego domyślne ustawienia, które można modyfikować w rzeczywistym środowisku aplikacji. W WINNT/system32/inetsrv/MetaBase.xml domyślna definicja brzmi: AspBufferingLimit="4194304" odpowiada maksymalnemu rozmiarowi przesłanego pliku AspMaxRequestEntityAllowed="204800" odpowiada maksymalnej ilości danych w POST ... Podsumowanie (napisz do listy kontrolnej): Używając ASP, musisz wziąć pod uwagę, że formularz POST ma limit 100KB na pole dla ogólnego przetwarzania odczytu. Rozważ, czy użyć Request.Binary.
|
Poprzedni:asp.net mvc ustawia post formularza, aby umożliwić przesłanie w HTMLNastępny:System.Linq.Dynamic
|