2009-07-08 36 views
66

我有一個web應用程序,它使用setRequestHeader API將上下文信息添加到XmlHttpRequest對象中。我正在使用自定義標題名稱(例如X-Foo)和一個JSON結構化值。它不是URL QueryString或POST正文的一部分,因爲它是有關請求的元信息。是否有一個實際的HTTP頭長度限制?

標題值是否有實際的大小限制?如果我的JSON被截斷,它將變得不可分析。我最關心的是Apache 2,Tomcat 6和IIS 7的限制。我做了Google搜索http標頭長度限制,但許多結果似乎過時了。 How big can a user agent string get?中有一些相關的評論,但並不像我想的那樣具體。

編輯: 我只是碰到這種類似的問題跑 - Maximum on http header values?

+0

有趣的方法。你以什麼樣的元數據發送? – 2009-07-08 12:30:07

+0

另請注意,如果用戶通過代理服務器連接,則可能會導致問題 – carpii 2012-08-13 23:08:34

回答

45

是的,但限制是可配置的,依賴於平臺。例如,Tomcat的默認限制爲8K。我相信IIS 6不知道IIS 7的限制是16K。我在幾個網站上使用集成的Windows身份驗證時遇到了這個問題。當編碼到頭部時,我的安全令牌太大了。幸運的是,這些都是可配置的。 IIS的註冊表設置可在http://support.microsoft.com/kb/820129找到。我相信要更改的關鍵設置是MaxFieldLength(每個標頭大小)和MaxRequestBytes(請求的總大小)。

14

對於Apache,我發現這個Server Limits for Apache Security一篇文章,列出了這些指令:

# allow up to 100 headers in a request 
    LimitRequestFields 100 
    # each header may be up to 8190 bytes long 
    LimitRequestFieldsize 8190 

對於Nginx的,從HttpCoreModule控制large_client_header_buffers指令是:

的請求最長的標題行也必須是不會超過一個緩衝區的大小 ,否則客戶端會收到錯誤「錯誤請求」(400)。

默認情況下一個緩衝區的大小等於頁面的大小, 取決於平臺這個4K或者8K

52

雖然每個web服務器軟件有一定的侷限性,是有區別是否有一個限制HTTP request line加頭字段或每個頭字段。

這裏的一個摘要:

  • 阿帕奇1.32.02.22.38190字節(對於每個報頭字段)
  • IIS:
    • 4.02097152字節(對於請求行加頭字段)
    • 5.0131072字節16384字節與Windows 2000服務包4(用於請求行加上報頭字段)
    • 6.016384字節(對於每個報頭字段)
  • Tomcat的:
    • 5.5.x/6.0.x49152字節(用於請求線加上報頭字段)
    • 7.0.x8190字節(請求行加報頭字段)

因此得出結論:通過以上的所有Web服務器所接受,一個請求的請求行加頭字段不應該超過8190字節。這也是每個頭域的限制(有效甚至更少)。

3

Flash Media Server 4.5具有非常短的默認標頭長度限制,可能導致服務器無法響應,特別是在存在適度的Cookie負載的情況下。

參見:Flash Media Server 4.5 Configuration and Administration: Configuring the server Configuring Apache HTTP Server: Specify the maximum HTTP header line length

在Flash Media Server的Adaptor.xml文件中,MaxHeaderLineLength 元素決定HTTP的頭大小的服務器可以處理。 MaxHeaderLineLength的默認值是1024字節。某些瀏覽器 發送大於1024字節的標頭。在這種情況下,Apache會發送 返回空響應。要解決此問題,配置 MaxHeaderLineLength到8192

注:默認情況下,Apache的HTTP標頭大小限制爲8 KB(8190個字節加上回車)。

把這個放在這裏以防止Flash Media Server上的頭大小限制咬別人。

4

雖然您可以配置服務器,但您不太可能真的可以通過防火牆,負載平衡器和代理進行全部配置。保持頭部大小很小,不會有問題。

相關問題