在一個典型的POST請求,你會看到下面的...
POST /to/my/path HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
Host: https://my.machine.com
Content-Length: 10
Action=Add
打破下來:
- 通過Content-Length的線的POST是請求頭。
- 的
POST
線是已知的,在HTTP術語,作爲Request-Line,其包含的方法(POST)+絕對路徑(/到/我/路徑)+ HTTP版本(HTTP/1.1)
Content-Type
- 讓我們知道正文內容是如何格式化/編碼的。
Host
- 讓服務器知道正在訪問哪些主機(主要用於虛擬主機設置)
Content-Length
- 讓我們知道有正文內容爲10字節
- 的
Action=Add
是POST正文內容。
它的核心有2個部分的請求或響應,標題和正文內容。
當您設置headerBufferSize
時,您正在設置標題內容(非主體內容)的最終上限。
當您擁有無限制的標頭大小(從濫用內存消耗到導致CPU使用過多的故意HashMap衝突)時,會出現大量的濫用/漏洞。限制標題緩衝區大小限制了這些問題的範圍。 (這些漏洞並非Jetty獨有,但對所有Web服務器都存在)
如果您遇到了這些限制,您應該考慮評估您如何使用solr(例如在應該使用POST時錯誤地使用GET),因爲增加headerBufferSize也會讓你知道各種已知的網絡漏洞。
更新:2013年10月24日
見相關What is the maximum length of a URL
我不是想增加'headerBufferSize'但更多的好奇,想知道什麼是GET請求的最大長度其他答案URL。根據你的回答,我假設要知道URL的最大允許大小的唯一方法是通過獲取最大頭部緩衝區大小(由Jetty允許)並減去頭部大小(不包含請求URL)來計算。這是對的嗎? –
添加更新以回答指向其他更詳細的關於URL長度的答案。 (這個問題是瀏覽器的具體問題,但答案不是) –
感謝您的信息。爲了清楚起見,我在工作中被問到找出Jetty可以接受的請求URL的最大長度。由於我的Jetty服務器接受由瀏覽器生成的編程請求,因此我必須記錄GET方法的最大長度,用戶可以安全地使用該方法將請求發送到我的服務器。如果我發出一個很大的數字,它們可能會遇到問題,如果它們添加到請求的請求URL +標頭的大小超過了允許的「headerBufferSize」。現在,想一想,我可能只是給出'headerBufferSize'的值並讓用戶決定。 –