HTTP GET isteğinin maksimum uzunluğu


487

HTTP GET isteğinin maksimum uzunluğu nedir ?

Sunucunun, bu uzunluğu aşan bir GET isteği aldığında dönebileceğini / dönebileceğini tanımlayan bir yanıt hatası var mı?

Tarayıcı sınırlarını da görmek ilginç olsa da, bu bir web hizmeti API'sı bağlamındadır.



7
@KillianDS Bir URL'nin maksimum uzunluğu ile kesinlikle hiçbir ilgisi yoktur. Soru maksimum uzunluğu hakkındadır istek gönderilir için bir URL.
Lorne Marquis

2
@EJP bir GET'in 'veri' içeriği bir URI'den daha fazlası değildir.
KillianDS

@JimAho Yorumunuz da ilk yorumun bir kopyası .....
Jun711

Yanıtlar:


463

Sınır, hem sunucuya hem de kullanılan istemciye (ve varsa sunucunun veya istemcinin kullandığı proxy'ye) bağlıdır.

Çoğu web sunucusu, genellikle sunucu yapılandırmasında bir yerde yapılandırılabilen 8192 bayt (8 KB) sınırına sahiptir. İstemci tarafı konusuna gelince, HTTP 1.1 belirtimi bu konuda bile uyarır. İşte bölüm 3.2.1'in bir özeti :

Not: Bazı eski istemci veya proxy uygulamaları bu uzunlukları düzgün bir şekilde desteklemeyebileceğinden, sunucular 255 baytın üzerindeki URI uzunluklarına bağlı olma konusunda dikkatli olmalıdır.

Internet Explorer ve Safari'deki sınır yaklaşık 2 KB, Opera'da yaklaşık 4 KB ve Firefox'ta yaklaşık 8 KB'dir. Bu nedenle, 8 KB'nin olası maksimum uzunluk olduğunu ve 2 KB'nin sunucu tarafında güvenmek için daha uygun bir uzunluk olduğunu ve 255 baytın tüm URL'nin geleceğini varsaymak için en güvenli uzunluk olduğunu varsayabiliriz.

Tarayıcıda veya sunucuda sınır aşılırsa, çoğu sınırsız karakterleri herhangi bir uyarı yapmadan keser. Ancak bazı sunucular HTTP 414 hatası gönderebilir . Büyük veri göndermeniz gerekiyorsa, GET yerine POST'u daha iyi kullanın. Sınırı çok daha yüksektir, ancak kullanılan sunucuya istemciden daha bağımlıdır. Genellikle ortalama web sunucusu tarafından yaklaşık 2 GB'a kadar izin verilir. Bu, sunucu ayarlarında bir yerde de yapılandırılabilir. Ortalama sunucu, POST sınırı aşıldığında, genellikle HTTP 500 hatası olarak sunucuya özgü bir hata / istisna görüntüler.


6
Soruyu tarayıcı sınırlamaları açısından cevaplıyorsunuz. HttpClient bir REST sunucusuyla etkileşim kurmak için kullanılıyorsa, GET ve POST arasında (sorunlu istek boyutu açısından) herhangi bir fark olup olmadığını biliyor musunuz?
aioobe

3
Elbette, POST verileri göndermek için gövdeyi kullanır. HTTP belirtimi, gönderiler için belirli bir boyut sınırı getirmez.
Ignacio A. Poletti

1
Http özellikleri tarafından GET ve DELETE isteklerine bir gövde koymasına izin verilir. Java ile test ettim ve işe yarıyor. Ne yazık ki burada yine bazı proxy'ler tüm vücudu kesebilir.
Nicolas Zozol

12
Get and Post yönteminin çok özel bir anlamı vardır, bu nedenle bir GET gerçekleştirmek için POST kullanmak, bir yumurtayı kırmak için çekiç kullanmakla aynıdır.
nohros

18
@nohros Bu idealist olarak doğrudur, ancak GET'in POST / PUT'un yapmadığı sınırlamalar da vardır. Örneğin, bir grup kimliği içeren çok uzun bir sorgu gerçekleştirmek istediğinizi varsayalım; yüzlerce kimlik seçerseniz, izin verilen URL boyutunun sınırını aşabilir, oysa bu sorguyu POST'a koymak kavramsal olarak çok anlamlı olmasa bile bundan kaçınabilir. Şahsen, HTTP'nin GET isteklerinin PUT ve POST gibi gövdelere sahip olmasını diliyorum.
devios1

143

Burada iki ayrı soru soruyorsunuz:

HTTP GET isteğinin maksimum uzunluğu nedir?

Daha önce de belirtildiği gibi, HTTP'nin kendisi istek uzunluğu için sabit kodlanmış bir sınır koymaz; ancak tarayıcıların 2 KB - 8 KB arasında değişen sınırları vardır ( çok eski tarayıcıları sayarsak 255 bayt ).

Bir GET isteği alırsa sunucunun bu uzunluğu aşması durumunda dönebileceği / dönebileceği tanımlanmış bir yanıt hatası var mı?

Kimse cevap vermedi.

HTTP 1.1, 414 Request-URI Too Longsunucu tanımlı bir sınıra ulaşıldığı durumlarda durum kodunu tanımlar . Daha fazla ayrıntıyı RFC 2616'da görebilirsiniz .

İstemci tanımlı sınırlar için, sunucuda bir şey döndürmenin bir anlamı yoktur, çünkü sunucu isteği hiç almaz.


23

Tarayıcı sınırları:

Browser           Address bar    document.location
                                 or anchor tag
---------------------------------------------------
Chrome                32779           >64k
Android                8192           >64k
Firefox                >64k           >64k
Safari                 >64k           >64k
Internet Explorer 11   2047           5120
Edge 16                2047          10240

Daha fazla istemek? Stack Overflow ile ilgili bu soruya bakın .



3

Teknik olarak, URL uzunluğu 2000 karakterin üzerine çıkarsa HTTP GET'in sorunları olacağını gördüm. Bu durumda, HTTP POST kullanmak veya URL'yi bölmek daha iyidir.


2

Daha önce de belirtildiği gibi, HTTP'nin kendisi istek uzunluğu için sabit kodlanmış bir sınır koymaz; ancak tarayıcıların GET yönteminde izin verilen 2048 karakteri arasında değişen sınırları vardır.


-6

Chrome tarayıcıyı kullanarak İSTEK ALIN

Evet. Bir GET isteğinde herhangi bir sınırlama yoktur.

Hem Chrome tarayıcı hem de curl komutunu kullanarak sorgu dizesinin bir parçası olarak ~ 4000 karakter gönderebiliyorum.

Beklenen 200 OK yanıtı döndüren Tomcat 8.x sunucusunu kullanıyorum.

İşte bir Google Chrome HTTP isteğinin ekran görüntüsü (güvenlik nedeniyle denediğim uç noktayı gizleme):

TEPKİ

Chrome tarayıcıyı kullanarak GET

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.