2009-05-01 148 views
425

是否依賴於瀏覽器?另外,不同的Web堆棧對於從請求中獲得的數據量有多少限制?查詢字符串的最大可能長度是多少?

+0

你也可以檢查這個http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-an-url – Xinus 2009-12-13 04:41:40

+0

它只適用於GET請求! POST請求的最大大小(帶或不帶multipart/form-data)在這裏是未知的! – peterh 2015-01-22 13:54:52

回答

796

RFC 2616(超文本傳輸​​協議 - HTTP/1.1)聲明查詢字符串的長度沒有限制(第3.2.1節)。 RFC 3986也表示沒有限制,但由於DNS限制(第2.3.3節),表示主機名限制爲255個字符。

儘管規格沒有指定任何最大長度,但實際限制是由網絡瀏覽器和服務器軟件強加的。基於在Boutell.com發現研究的基礎上:

  • 微軟的Internet Explorer(瀏覽器)
    微軟指出,在Internet Explorer中的URL的最大長度爲2,083個字符,在路徑不超過2,048個字符部分網址。嘗試使用超過此長度的URL會在Internet Explorer中產生明確的錯誤消息。

  • 微軟邊緣(瀏覽器)
    極限似乎是圍繞81578個字符。見URL Length limitation of Microsoft Edge


  • 它停止顯示在URL後64K字,但能爲超過10萬個字。除此之外,沒有進一步的測試。

  • 火狐(瀏覽器)
    後65536個字符,在地址欄不再顯示在Windows的Firefox 1.5.x.網址但是,更長的網址將起作用。在100,000個字符後沒有進一步的測試。

  • Safari瀏覽器(瀏覽器)
    至少80,000個字符會工作。除此之外,測試還沒有嘗試過。

  • 歌劇院(瀏覽器)
    至少有19萬個字符會工作。 190,000個字符後停止測試。 Opera 9 for Windows繼續在地址欄中顯示完全可編輯的 可複製和可粘貼的URL,即使在190,000個字符處也是如此。

  • 的Apache(服務器)
    早期嘗試來測量撞到的大約4000個字符的服務器URL長度限制,在這之後的Apache產生「413實體太大」錯誤的網絡瀏覽器的最大的URL長度。使用了紅帽企業Linux 4中最新的Apache版本。 Apache官方文檔僅提到了請求中單個字段的8,192字節限制。

  • Microsoft Internet信息服務器(服務器)
    默認限制爲16,384個字符(是的,微軟的Web服務器比微軟的網絡瀏覽器接受較長的URL)。這是可配置的。

  • Perl的HTTP ::守護程序(服務器)
    最多8,000個字節會工作。使用Perl的HTTP :: Daemon模塊構建Web應用程序服務器的用戶將在所有HTTP請求標頭的組合大小上遇到16,384字節的限制。這不包括POST方法表單數據,文件上傳等,但它包含URL。實際上,當URL長度超過8,000個字符時,會導致413錯誤。這個限制可以很容易地刪除。在Daemon.pm中查找所有出現的16x1024,並用更大的值替換它們。當然,這確實會增加您遭受拒絕服務攻擊的風險。

7

我假設你的意思是一個uri字符串的最大長度。 This可能會有所幫助。

通常情況下,一旦URI由於太長而變得不可讀,就應該使用POST請求代替。

+38

僅僅因爲有太多的數據不適合GET請求就切換到POST請求是沒有意義的。 – 2010-11-09 10:20:46

1

不同的web堆棧確實支持不同長度的http請求。我從經驗中知道,Safari的早期堆棧只支持4000個字符,因此由於USER-STATE而難以處理ASP.net頁面。這甚至是POST,所以你必須檢查瀏覽器,看看堆棧限制是什麼。我認爲你甚至可以在新的瀏覽器上達到極限。我不記得,但其中一個(IE6,我認爲)有16位限制,32,768什麼的限制。

0

雖然官方沒有任何限制,許多安全配置建議指出,在服務器上maxQueryStrings應設置爲1024字符數限制,而包括查詢字符串整個URL應設置爲2048最大字符。這是爲了防止Web服務器上的緩慢HTTP請求漏洞,以防止緩慢的DDOS攻擊。

相關問題