2011-11-23 75 views
5

在多部分(即Content-Type=multipart/form-data)形式,有在邊界字符串的長度的上限,一個HTTP服務器應該接受?HTML multipart形式 - 「邊界」字符串的最大長度?

據我所知,相關的RFC說70個字符:

  • RFC2616(HTTP/1.1)節 「3.7介質類型」 說,在Content-Type頭允許的類型是通過RFC1590(媒體類型註冊過程)所定義。
  • RFC1590更新RFC-1521(MIME)。
  • RFC1521說的邊界「必須是不超過70個字符,不計算兩大龍頭連字符」。
  • 相同的文本也出現在RFC2046,它們據說已廢棄RFC1521

因此,我可以確定所有主要的HTTP/1.1瀏覽器今天都堅持這個限制嗎?是否有任何瀏覽器(或其他HTTP客戶端/庫)已知違反此限制?

是否有一些其他規範或常見的經驗法則我錯過了,說該字符串將是更短比70個字符?在Chrome瀏覽器(IUM)我得到的是這樣的:----WebKitFormBoundaryLu4dNSGEhJZUgoe5,這顯然是短於70個字符。

我問這個問題,因爲我的服務器在極內存受限的環境中運行,所以「malloc的大到足以容納整個頭部字符串緩衝區」不是一個理想的答案。

+0

你要求一個上限。當然,你可能沒有得到完整的上限但是更少(與Chrome邊界有關)。 –

+0

如果您使用AJAX並直接在您的PHP文件中處理數據,應該沒有問題 –

+0

「保存整個標題字符串」?爲什麼整個標題,如果你只是需要邊界? –

回答

5

如您所知,RFC 2046更新了MIME規範,但將最大邊界字符串的限制保留爲70個字符,不包括兩個前導連字符。

我認爲這是一個公平的假設,所有主流瀏覽器(以及所有使用MIME的客戶端,如郵件程序)遵循規範,因爲否則傳遞多部分數據的確會非常危險。

  • 捲曲:----------------------------5a56a6c893f2(40)
  • 的Chrome 30(WebKit的):----WebKitFormBoundarym0vCJKBpUYdCIWQG(38)
  • 可以肯定,我已經試驗性地使用最新版本的驗證它爲您Safari瀏覽器6(WebKit的,並且相同的Chrome):----WebKitFormBoundaryFHUXvJBZwO2JKkNa(38)

  • 火狐24:---------------------------7096603861379320641089344535(55)
  • IE 10:---------------------------7dd1961640278(40) - 相同的技術,捲曲!
  • 的Apache的HttpClient:-----------------------------1294919323195(42)

這樣不僅使各主流瀏覽器/客戶端符合,但一切都會讓您節省每緩衝區邊界線15個的分配字節從理論最大值。如果您可以輕鬆切換用戶代理,則可以獲得更高的性能。;-)

+0

打開用戶代理?你是認真的嗎? –

+0

不那麼嚴重。 – mjk