2009-05-01 17 views
425

Tarayıcı bağımlı mı? Ayrıca, farklı web yığınlarının, istekten ne kadar veri alabilecekleri konusunda farklı sınırları var mı?Bir sorgu dizesinin olası maksimum uzunluğu nedir?

+0

Ayrıca bu http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-an-url adresini de kontrol edebilirsiniz – Xinus

+0

Sadece GET istekleri içindir! POST isteklerinin maksimum boyutu (çok parçalı/form verili veya içermeyen) burada bilinmiyor! – peterh

cevap

796

RFC 2616 (Köprü Metni Aktarım Protokolü - HTTP/1.1) bir sorgu dizesi (bölüm 3.2.1) uzunluğuna sınırlama yoktur belirtiyor. RFC 3986 ayrıca bir sınırlama olmadığını belirtir, ancak DNS sınırlamaları nedeniyle ana makine adının 255 karakterle sınırlı olduğunu gösterir (bölüm 2.3.3). Özellikler herhangi maksimum uzunluğu belirtmek olmasak da

, pratik sınırlar web tarayıcısı ve sunucu yazılımı tarafından empoze edilmektedir. Boutell.com bulunan araştırmasına göre:

  • Microsoft Internet Explorer (Tarayıcı)
    Microsoft Internet Explorer bir URL maksimum uzunluğu yolunda en fazla 2.048 karakter yokken 2083 karakter olduğunu belirtmektedir URL'nin bir kısmı. Bundan daha uzun URL'leri kullanma girişimleri, Internet Explorer'da açık bir hata iletisi oluşturdu.

  • Microsoft Kenar (Tarayıcı)
    sınırı etrafında 81.578 karakter gibi görünüyor. URL Length limitation of Microsoft Edge

  • Chrome
    O 64k karakterden sonra URL gösteren, ancak birden 100k karakter hizmet edebilir durur bakın. Bunun ötesinde daha fazla test yapılmadı.

  • Firefox (Tarayıcı)
    65.536 karakterden sonra konum çubuğu artık Windows Firefox 1.5.x. URL'yi görüntüler Ancak, daha uzun URL'ler çalışacaktır. 100.000 karakterden sonra başka bir test yapılmadı.

  • Safari (Tarayıcı)
    en az 80,000 karakter çalışacaktır. Testler bunun ötesinde denenmedi.

  • Opera (Tarayıcı)
    en az 190.000 karakter çalışacaktır. 190,000 karakterden sonra test durdu. Windows için Opera 9 hatta 190,000 karakter konum çubuğuna tamamen düzenlenebilir, copyable ve pasteable URL'yi görüntülemek için devam etti.

  • Apache (Sunucu) Apaçi bir "413 Varlığı Çok Büyük" hatası üretir bundan sonra yaklaşık 4000 karakterlik bir sunucu URL uzunluğu sınırı, çarptı web tarayıcılarında maksimum URL uzunluğu ölçmek için
    Erken girişimleri. Red Hat Enterprise Linux 4'te bulunan güncel güncel Apache yapısı kullanıldı. Resmi Apache dokümantasyonu, bir talepte sadece bir alan üzerinde 8.192 baytlık bir sınırdan söz etmektedir.

  • Microsoft Internet Information Server (Sunucu)
    varsayılan sınırı 16.384 karakterdir (evet, Microsoft'un web sunucusu Microsoft'un web tarayıcısı daha uzun URL'ler kabul eder). Bu yapılandırılabilir.

  • Perl HTTP :: 8.000 bayt kadar
    çalışacak Daemon (Sunucu). Perl'in HTTP :: Daemon modülüyle web uygulama sunucularını oluşturanlar, tüm HTTP istek başlıklarının birleşik boyutu üzerinde 16,384 baytlık bir sınırla karşılaşacak. Bu, POST yöntemi form verileri, dosya yüklemeleri vb. Içermez, ancak URL'yi içerir. Uygulamada, bir URL 8,000 karakterden önemli ölçüde daha uzun olduğunda bu 413 hatasıyla sonuçlandı. Bu sınırlama kolayca kaldırılabilir. Daemon.pm içinde 16x1024'ün tüm oluşumlarına bakın ve bunları daha büyük bir değerle değiştirin. Tabii ki, bu hizmet reddi saldırılarına maruz kalmanızı artırır.

+3

Neden "Microsoft Internet Explorer (Tarayıcı)" yerine sürüm numarasını söylemiyorsunuz? – Lijo

+0

Bayt veya karakter yerine limit sayımı için teşekkürler :) Anlaması kolay. – sun

+5

Sorgu Dizesi'ndeki varsayılan IIS sınırının 16,384 karakterden önemli ölçüde daha az olduğu anlaşılıyor. Burada 2048 olarak şu adresten bahsediliyor: https://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits – JTech

7

Bir uri dizgisi için maksimum uzunluk anlamına geldiğinizi varsayıyorum. This yardımcı olabilir.

Genellikle URI'lar çok uzun olduklarından okunamaz duruma gelirler, bunun yerine bir POST isteği kullanma zamanı.

+38

Sadece bir GET isteğine sığacak çok fazla veri olduğu için POST isteğine geçiş yapmak biraz mantıklı. –

+0

@Johannes GET çalışmıyorsa, ancak POST yaparsa, neden POST'a geçmek mantıklı değildir? –

+8

@Eugene Beresovksy: GET ve POST farklı şeyler anlamına geldiğinden (ref. [HTTP/1.1 belirtimi] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)). –

1

Farklı web yığınları, farklı http isteklerini destekler. Deneyimden, Safari'nin ilk yığınlarının sadece 4000 karakteri desteklediğini ve dolayısıyla KULLANICI-DURUM nedeniyle ASP.NET sayfalarını işlemekte zorluk çektiğini biliyorum. Bu, POST için bile olsa, tarayıcıyı kontrol etmeli ve yığın limitinin ne olduğunu görmelisiniz. Yeni tarayıcılarda bile bir limite ulaşabileceğinizi düşünüyorum. Hatırlayamıyorum ama bunlardan biri (IE6, sanırım) 16-bit limit, 32.768 veya bir şey sınırı vardı.

0

rağmen resmen orada, birçok güvenlik yapılandırması önerileri sorgu dizesi dahil tüm url 2048 max ayarlanmalıdır iken bir sunucuda maxQueryStrings 1024 maksimum karakter sınırını ayarlı gerektiğini limitsiz devlet edilir karakter. Bu, yavaş DDOS saldırılarını önlemek için bir web sunucusundaki Yavaş HTTP İsteği güvenlik açığını engellemektir.

İlgili konular