Процитируем из RFC 1341, раздел 7.2.1 , что я считаю соответствующими битами параметра boundary
заголовка Content-Type
(для MIME):
Все подтипы "multipart" имеют общий синтаксис ...
Для поля Content-Type для составных объектов требуется один параметр - border, который используется для указания границы инкапсуляции. Граница инкапсуляции определяется как строка, состоящая полностью из двух символов дефиса ("-", десятичный код 45), за которыми следует значение параметра границы из поля заголовка Content-Type.
, а затем уточняет:
Таким образом, типичное многокомпонентное поле заголовка Content-Type может выглядеть следующим образом:
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
Это указывает на то, что объект состоит из нескольких частей, каждая из которых имеет структуру, синтаксически идентичную сообщению RFC 822, за исключением того, что область заголовка может быть полностью пустой, и что каждой части предшествует строка
--gc0p4Jq0M2Yt08jU534c0p
На что обратить внимание:
- Граница инкапсуляции должна появляться в начале строки, то есть после CRLF (перевода строки возврата каретки)
- За границей должен немедленно следовать либо другой CRLF и поля заголовка для следующей части, либо два CRLF, и в этом случае нет полей заголовка для следующей части (и поэтому предполагается, что это Content- Введите текст / обычный).
- Границы инкапсуляции не должны появляться внутри инкапсуляций и должны быть не более 70 символов, не считая двух ведущих дефисов.
Последнее, но не менее важное:
Граница инкапсуляции, следующая за последней частью тела, является выделенным разделителем, который указывает, что дальнейшие части тела не будут следовать. Такой разделитель идентичен предыдущим разделителям, с добавлением еще двух дефисов в конце строки:
--gc0p4Jq0M2Yt08jU534c0p--
Я надеюсь, что это поможет кому-то еще в будущем, так как мне пришлось некоторое время бродить, чтобы получить полную картину (пожалуйста, прочитайте необходимые RFC, чтобы получить самое глубокое понимание).