2015-01-14 85 views
2

請求(GET)或(POST):Dropwizard:如何解決414請求URI太長

http://localhost:8080/images?name=iVBORw0KGgoAAAANSUhEUgAAAAUA%20AAAFC ......

響應:

狀態代碼:414請求 - URI太長 連接:關閉 內容長度:0

如何增加請求大小?

+0

至於你提到的GET或POST,爲什麼不切換到POST?該錯誤是關於在URL中發送大量數據。例如,即使您可以在服務器中增加它,但仍然可能會遇到代理問題。郵政似乎是一個更適合您的案件類型的請求。 –

+1

正確的答案是**不**改變限制。您不應該將超長的數據作爲查詢參數發送。 –

回答

7

您有一個超過8kb大小的請求URI! Eeesh!

由於瀏覽器,代理和網絡硬件中存在各種漏洞和錯誤,因此存在Request-URI限制。

儘管可以增加Jetty中的請求URI限制檢查,但爲Jetty選擇的值代表當前各種http客戶端和中介在公共Internet上使用的當前安全最大值。

警告:你不想做這個

這是不合適的:

  • 一個從Internet訪問Web服務器。
  • Web瀏覽器訪問的瀏覽器,如Chrome,Firefox,Safari,MSIE或Opera。
  • 移動設備訪問的WebServer,如Android,iOS或Microsoft移動設備。
  • 在其前面有代理的WebServer。
  • 使用代理訪問WebServer的客戶端。

這僅適用於直接與Jetty服務器通信的自定義HTTP客戶端之間的事務處理。

說明碼頭9.2.6.v20141205

如果你沒有一個碼頭基地${jetty.base}目錄然而,創建一個,並對其進行初始化。

[user]$ mkdir mybase 
[user]$ cd mybase 
[mybase]$ java -jar /path/to/jetty-distribution-9.2.6.v20141205/start.jar \ 
      --add-to-start=http,deploy,webapp 

編輯${jetty.base}/start.ini

而改變(或添加)以下屬性與您想要的上限。

jetty.request.header.size=8192 

並且不,沒有辦法禁用此限制檢查。

對於每次增加,你都會面臨越來越大的問題。

從一些瀏覽器(並最終所有瀏覽器)開始不發送請求,更不用說jetty接收它了。

同時,許多代理服務器處理您的請求的能力開始失敗,導致終止和失敗的連接或請求。有時甚至截斷了對Jetty的請求。

此外,每次增加都會暴露出各種圍繞頭部未檢查限制的漏洞,從而導致各種組執行基於CPU和內存的DOS攻擊時所需的網絡流量很少的能力。

正確的方法來解決此:

你真的應該切換到POST(或PUT)基於請求數據,並且不發送在HTTP協議的請求頭數據的量。

1

一個可能更簡單的方法是在你的yaml配置文件中設置requestHeaderSize。下面是我們的摘錄:

server: 
     applicationConnectors: 
     - type: http 
     maxRequestHeaderSize: 100KiB 

其他可能的設置顯示here

相關問題