Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20025|Yanıt: 0

[ASP.NET] ASP.NET Parametre geçişi, uzunluk sınırları ve kullanım önlemleri.

[Bağlantıyı kopyala]
Yayınlandı 8.03.2018 10:18:07 | | | |
1. Sorunun nedenleri
Bir projenin çıkışından sonraki hata istatistiklerinin "Post-Release Problems" ekinde şunlar bulunmaktadır:   



Bir deneyim birikimi olarak, bu sorunlar, nedenler ve çözümler kontrol listesine dahil edilecektir, sonra:
İlk soru: URL parametresinin üst sınırı doğru referans mı? Üst sınır nedir?
İkinci soru: POST yaparken neden veri sınırı var? Sınır 128K mı?  
2. Problem analizi
1. İlki:
1) URL'de parametre üst sınırı yoktur. Sorun aslında IE'nin URL'lerde bir uzunluk sınırı olması.
2) HTTP protokol spesifikasyonu ayrıca URL'nin uzunluğunu da sınırlamaz. Bu sınır, belirli bir tarayıcı ve sunucu tarafından uygulanan bir sınırlamadır. IE'nin URL uzunluğu sınırı 2083 bayttır (2K+35). Netscape, FireFox gibi diğer tarayıcılar için teorik bir uzunluk sınırı yoktur ve bu sınır işletim sisteminin desteğine bağlıdır. [Ref. 1]
3) "Değişken uzunlukta parametreler URL üzerinden geçirilir" aslında form gönderilirken GET yönteminin kullanıldığı anlamına gelir, POST yöntemi değil. Bu potansiyel hataya sebep olan şey, form verilerini göndermek için GET yönteminin kullanılmasıdır. Çünkü GET yöntemi, URL'deki verileri işleme için sunucuya iletir.
4) Bu sınırın sadece parametre değeriniz veri uzunluğu değil, tüm URL uzunluğu olduğunu unutmayın.
5) IE'nin URL uzunluğu sınırı olduğundan, hem GET yöntemi hem de POST yöntemi bu sınırlamaya sahiptir.
(FORM [Ref. 2]'nin GET ve POST yöntemleriyle ilgili detaylar için ilgili belgeye bakınız)  
Öneriler:
1) Uygulamanın bulunduğu ortamı, örneğin web uygulamasının tarayıcı ve sunucu ortamını anlamak ve özel parametre sınırlamalarını anlamak.
2) Karmaşık verileri göndermek için mümkün olduğunca POST yöntemini kullanın. Not: FORM metod özniteliğini yazmadığında, varsayılan olarak GET yöntemi kullanılır.
Sonuç (Kontrol Listesi'ne yazın):
GET yöntemiyle veri gönderirken, IE ortamında URL uzunluğu sınırının 2083 baytlık olduğunu göz önünde bulundurmanız gerekir.
2. İkincisi:
1) Teorik olarak, POST'un boyut sınırı yoktur. HTTP protokol spesifikasyonunun da boyut sınırı yoktur.
2) "POST veri için 128K boyut sınırı var" yeterince doğru değildir, POST verisi için bir sınır yoktur ve sunucunun işlemcisinin işlem gücü sınırlayıcı rol oynar.
3) ASP programları için, Request nesnesi her form alanını işlediğinde 100K veri uzunluğu sınırı vardır. Ancak Request.BinaryRead ile böyle bir sınırlama yok. 100K'dan fazla form alan verisini işleme gerektiren çözümler için lütfen aşağıdaki [Ref. 3]'e bakınız.
4) Bu nedenle, IIS 6.0 için Microsoft güvenlik nedenleriyle kısıtlamaları artırmıştır [Ref. 4]. Ayrıca şunlara da dikkat etmemiz gerekiyor:
   IIS 6.0, varsayılan olarak maksimum 200 KB ASP POST verisi sunar ve limit form alanı başına 100 KB'dir.
    IIS 6.0 yükleme dosyalarının varsayılan boyutu 4MB'dır.
    IIS 6.0, varsayılan olarak maksimum istek başlığı 16KB'dir.
    Bu sınırlamalar IIS 6.0'dan önce mevcut değildi.
Öneriler:
1) Çalışma ortamının varsayılan ayarlarını bilmek, ortaya çıkan sorunları tasarlamanıza ve hızlıca çözmenize yardımcı olur.
2) Server versiyonu düşünülmelidir. Her IIS versiyonunun bu parametreler için farklı varsayılan ayarları vardır, gerekirse bilgi bulun ve bir karşılaştırma tablosu derleyin. Bu şekilde, geliştirme ve test için bir referans elde edilir.
3) IIS 6.0'ın bu sınırlamaları aslında sadece varsayılan ayarlarıdır ve bunları uygulama ortamında değiştirebilirsiniz.
    WINNT/system32/inetsrv/MetaBase.xml içinde varsayılan tanım şudur:
        AspBufferingLimit="4194304" yüklenen dosyanın maksimum boyutuna karşılık gelir
        AspMaxRequestEntityAllowed="204800" POST'taki maksimum veri miktarına karşılık gelir
        ...
Sonuç (Kontrol Listesi'ne yazın):
ASP kullanırken POST formunun genel okuma işleme için alan başına 100KB sınırı olduğunu göz önünde bulundurmalısınız. Request.Binary kullanıp kullanmayacağınızı düşünün.





Önceki:asp.net mvc, form gönderisini HTML göndermesine izin verecek şekilde ayarlar
Önümüzdeki:System.Linq.Dynamic
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com