У меня есть вопрос относительно дизайна этих протоколов. Почему мы используем границу для разделения частей составного сообщения вместо того, чтобы вводить длину содержимого для каждой части? Использование длины синтаксического анализа было бы проще. Я упускаю какую-то основную причину использования границ, а не параметра длины? Спасибо!
Http/Smtp MIME составной. Почему граница?
Ответы (2)
Используя длину, синтаксический анализ будет [быть] проще
Здесь вы ошибаетесь. Авторы составного MIME имели в виду случаи, когда нельзя было заранее определить длину части сообщения. Подумайте о кодировках контента, которые изменяют длину сообщений, таких как base64, UUencode и другие. Есть также сжатие, шифрование и еще много чего. Также: Content-Length
— это заголовок объекта. Это означает, что если вы достигли его, вы уже начали анализировать часть сообщения. Он не имеет буквально никаких преимуществ перед пограничным маркером.
Если вы изучаете более старые протоколы, вы часто будете сталкиваться с маркером (обычно \0
), указывающим на конец сообщения. Отправка количества байтов сообщения — еще одно решение, но вы не найдете его часто в местах, где содержимое сообщения должно быть преобразовано на лету или каким-либо образом передано в потоковом режиме.
Итог: составная граница позволяет использовать некоторые интересные приложения с содержимым сообщений непредсказуемого размера. Ярким примером является передача HTTP-сервера.
Content-Length
определен именно так, как вы написали здесь.
- person DaSourcerer; 05.01.2014
\r\n--{$boundary}\r\n
. Это по-прежнему не гарантирует, что допустимая граница не будет частью тела сообщения. Но по крайней мере это маловероятно.
- person DaSourcerer; 21.01.2016
Потому что в старые добрые времена стандарт MIME определялся таким образом. Одна из причин, вероятно, заключалась в том, что длина содержимого имеет проблему с текстовыми/обычными данными, где новая строка может быть либо CR (старый Mac), LF (unix), либо CR LF (windows, dos). Другой может заключаться в том, что человеку легче читать, что, ИМХО, является плохим аргументом, но часто случается, когда предпочтение отдается текстовым представлениям, таким как HTTP, XML или SOAP, вместо более эффективных двоичных способов, таких как ASN.1 или SUN RPC.
Вы также можете рассматривать это как успешную попытку отрасли продавать более мощные серверы, вводя бесполезные накладные расходы в протоколы :)
application/x-www-form-urlencoded
, что является более компактным форматом;)
- person DaSourcerer; 05.01.2014