Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
960 views
in Technique[技术] by (71.8m points)

http - What rules apply to MIME boundary?

When you are writing MIME, you separate different chunks of your message with a certain boundary. I failed for some reason to find any documentation explaining this boundary, but here's what I gathered from examples:

  1. Boundary can be any string of letters and numbers, i. e. "d29a0c638b540b23e9a29a3a9aebc900aeeb6a82".

  2. There are no rules for generating the boundary, you can just md5sum the name of your beloved, and here you go, you've got your boundary.

  3. If you are sending MIME over HTTP, you must add a header "Content-Type" specifying that you do, and your boundary, contents of a header may look like this:

    multipart/form-data; boundary=d29a0c638b540b23e9a29a3a9aebc900aeeb6a82

  4. In the body of your message, the boundary should be preceded with "--", like:

    --d29a0c638b540b23e9a29a3a9aebc900aeeb6a82

But following these rules (and this helpful answer) I failed to generate POST query that server would accept. Am I missing something? Did I get something wrong?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The syntax of a boundary is:

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

And the body of a multipart entity has the syntax (only the important parts):

 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 "--"

The preceeding -- is mandatory for every boundary used in the message and the trailing -- is mandatory for the closing boundary (close-delimiter). So a multipart body with three body-parts with boundary as boundary can look like this:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...