2011-01-11 8 views
35

Wenn Sie MIME schreiben, trennen Sie verschiedene Teile Ihrer Nachricht mit einer bestimmten Grenze. Ich nicht aus irgendeinem Grund keine Dokumentation zu finden, diese Grenze zu erklären, aber hier ist, was ich aus den Beispielen gesammelt:Welche Regeln gelten für die MIME-Grenze?

  1. Boundary kann eine beliebige Zeichenfolge aus Buchstaben und Zahlen, i. e. "d29a0c638b540b23e9a29a3a9aebc900aeeb6a82".

  2. Es gibt keine Regeln zum Generieren der Grenze, Sie können nur md5sum den Namen Ihrer Geliebten, und hier gehen Sie, Sie haben Ihre Grenze.

  3. Wenn Sie MIME über HTTP senden, müssen Sie einen Header "Content-Type" add angeben, dass Sie das tun, und Ihre Grenze, die Inhalte eines Headers kann wie folgt aussehen:

    multipart/form-data ; boundary = d29a0c638b540b23e9a29a3a9aebc900aeeb6a82

  4. Im Körper Ihrer Nachricht, sollte die Grenze sein voraus "-", wie:

    --d29a0c638b540b23e9a29a3a9aebc900aeeb6a82

Aber nach diesen Regeln (und this hilfreich Antwort) Ich konnte keine POST-Abfrage generieren, die der Server akzeptieren würde. Fehle ich etwas? Habe ich etwas falsch gemacht?

Antwort

57

Die syntax of a boundary ist:

boundary := 0*69<bchars> bcharsnospace 
bchars := bcharsnospace/" " 
bcharsnospace := DIGIT/ALPHA/"'"/"("/")"/
        "+"/"_"/","/"-"/"."/
        "/"/":"/"="/"?" 

Und die body of a multipart entity die Syntax hat (nur die wichtigen Teile):

multipart-body := [preamble CRLF] 
        dash-boundary transport-padding CRLF 
        body-part *encapsulation 
        close-delimiter transport-padding 
        [CRLF epilogue] 
dash-boundary := "--" boundary 
encapsulation := delimiter transport-padding 
        CRLF body-part 
delimiter := CRLF dash-boundary 
close-delimiter := delimiter "--" 

Die vorhergehenden -- ist obligatorisch für jeden Grenze in der verwendet Nachricht und das abschließende -- ist obligatorisch für die schließende Grenze (close-delimiter). So ein mehrteiliger Körper mit drei Körperteilen mit boundary als Grenze kann wie folgt aussehen:

--boundary 
1. body-part 
--boundary 
2. body-part 
--boundary 
3. body-part 
--boundary-- 
+1

bitte erklären * Transport-Polsterung * auch –

+2

brauchen wir CRLF nach der Schließung Grenze? – johnlowvale

+1

@johnlowvale '[CRLF epilogue]' so vermute ich, dass es optional ist, mit CRLF gemäß [bnf-Grammatik] zu enden (https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form). Siehe Abschnitt ** Varianten **. –