"1. Разделение заголовков и тела пустой строкой. Это сделано за тем, что бы если послали длинное тело — можно было бы определить его начало."
Я бы поспорил. Что один пробел, что два - разницы для парсера не будет при прочих равных.
Это хорошо только как спецсимвол - в заголовках два переноса строки не встретятся по определению, а в тексте пользовательского запроса - могут. Значит, каждый блок пользовательского запроса просто логичнее начинать с комбинации, которая никогда не встретится в заголовках =)
Пустая строка — это и есть спецсимвол. И нужен для разделения. Разницы никакой, но оно служит именно спецсимволом разделения и ничем больше. Я про это и написал.
"самый короткий формат" — он самый короткий потому, что в принципе позволяет надёжно разделять сообщения. В противном случае, мы, кто бы мог подумать, не можем разделять сообщения, потому что их нет. Приходить будет всё что нам прислали в склеенном виде, и нам или регулярками вытаскивать волшебные сигнатуры конца сообщения (что грубо и стрёмно, и может присутстовать в теле, что ломает систему), или кодировать и разделять чем-то типа \n
.
TCP — это про потоки байтов, там всё склеивается.