2011-11-23 11 views
5

In un modulo a più parti (ad esempio Content-Type=multipart/form-data), esiste un limite superiore sulla lunghezza della stringa limite che un server HTTP deve accettare?Form HTML multipart - lunghezza massima della stringa "boundary"?

Per quanto posso dire, gli RFC sull'argomento dicono 70 caratteri:

  • RFC2616 (HTTP/1.1) sezione "3.7 Tipi di carta", afferma che i tipi consentiti nell'intestazione Content-Type è definito da RFC1590 (Procedura di registrazione del tipo di supporto).
  • RFC1590 aggiornamenti RFC-1521 (MIME).
  • RFC1521 afferma che un limite "non deve essere più lungo di 70 caratteri, senza contare i due trattini iniziali".
  • Lo stesso testo appare anche in RFC2046 che si suppone obsoleti RFC1521.

Quindi posso essere certo che tutti i principali browser HTTP/1.1 là fuori aderiscano a questo limite? Esistono browser (o altri client/librerie HTTP) noti per superare questo limite?

C'è qualche altra specifica o regola empirica comune mi manca che dice che la stringa sarà più breve di di 70 caratteri? In Chrome (ium) ho qualcosa di simile a questo: ----WebKitFormBoundaryLu4dNSGEhJZUgoe5, che è ovviamente più corto di 70 caratteri.

Sto chiedendo questa domanda perché il mio server è in esecuzione in un ambiente estremamente limitato di memoria, quindi "malloc un buffer abbastanza grande da contenere l'intera stringa di intestazione" non è una risposta ideale.

+0

Chiedi un limite superiore. Naturalmente è possibile che non si ottenga il limite massimo completo ma inferiore (in relazione al limite Chrome). –

+0

non dovrebbe esserci alcun problema se si utilizza AJAX e si elaborano i dati direttamente nel file PHP –

+0

"contenere l'intera stringa di intestazione"? Perché l'intera intestazione, se hai solo bisogno del confine? –

risposta

5

Come si nota, RFC 2046 ha aggiornato la specifica MIME, ma ha mantenuto la restrizione della stringa limite massima a 70 caratteri, senza contare i due trattini iniziali.

Penso che sia una giusta ipotesi che la specifica sia seguita da tutti i principali browser (e tutti i client MIME che utilizzano, come i programmi di posta) poiché altrimenti il ​​passaggio di dati multipart sarebbe molto rischioso.

A dire il vero, ho verificato sperimentalmente per voi utilizzando le ultime versioni di:

  • ricciolo: ----------------------------5a56a6c893f2 (40)
  • Chrome 30 (WebKit): ----WebKitFormBoundarym0vCJKBpUYdCIWQG (38)
  • Safari 6 (WebKit, e lo stesso come Chrome): ----WebKitFormBoundaryFHUXvJBZwO2JKkNa (38)
  • FireFox 24: ---------------------------7096603861379320641089344535 (55)
  • IE 10: ---------------------------7dd1961640278 (40) - stessa tecnica arricciatura !
  • Apache HttpClient: -----------------------------1294919323195 (42)

Così non solo tutti i principali browser/client conformi, ma tutto permetterebbe di risparmiare 15 byte allocati per contorno al tampone dal massimo teorico. Se si potesse banalmente attivare l'agente utente, si potrebbero spremere ancora più prestazioni.;-)

+0

Attivare user-agent? Sei serio? –

+0

Non così grave. – mjk

Problemi correlati