Какие правила применяются к границе MIME? - PullRequest
36 голосов
/ 11 января 2011

Когда вы пишете MIME, вы разделяете различные фрагменты вашего сообщения с определенной границей. По какой-то причине мне не удалось найти какую-либо документацию, объясняющую эту границу, но вот что я взял из примеров:

  1. Границей может быть любая строка букв и цифр, т.е. е. "D29a0c638b540b23e9a29a3a9aebc900aeeb6a82".

  2. Нет никаких правил для создания границы, вы можете просто md5sum имя вашего любимого, и вот, пожалуйста, у вас есть ваша граница.

  3. Если вы отправляете MIME по HTTP, вы должны добавить заголовок «Content-Type», указывающий, что вы делаете, и ваша граница, содержимое заголовка может выглядеть следующим образом:

    многочастному / форм-данных; граница = d29a0c638b540b23e9a29a3a9aebc900aeeb6a82

  4. В теле вашего сообщения границе должен предшествовать знак "-", например:

    - d29a0c638b540b23e9a29a3a9aebc900aeeb6a82

Но, следуя этим правилам (и этот полезный ответ), мне не удалось сгенерировать POST-запрос, который сервер принял бы. Я что-то пропустил? Я что-то не так понял?

1 Ответ

61 голосов
/ 11 января 2011

Синтаксис границы :

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

И тело составного объекта имеет синтаксис (только важные части):

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

Предыдущий -- является обязательным для каждой границы, используемой в сообщении, а завершающий -- является обязательным для закрывающей границы ( close-delimiter ). Таким образом, составное тело с тремя частями тела с boundary в качестве границы может выглядеть следующим образом:

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