HTTPS - это HTTP через поток SSL. Поток SSL реализован через обычный сокет TCP. Beast добавляет «Read», потому что он не видит HTTP-запрос, он просто видит то, что выглядит как случайные двоичные данные. Он не знает (и не обнаруживает, что это поток SSL).
Причина, по которой вы видите так много «плохих» линий, заключается в том, что Firefox видит поток TLS, пытающийся подключиться, а затем терпящий неудачу. Это просто повторяет соединение потока SSL. Таким образом, вы в конечном итоге несколько линий подключения BAD.
Вот почему порт HTTP по умолчанию равен 80, а порт HTTPS по умолчанию - 443. Соединение клиента HTTPS с сервером HTTP никогда не будет работать и будет давать результаты, которые вы видите.
UPDATE:
Причина, по которой вы попадаете в цикл BAD, заключается в том, что request_buffer не очищается от ошибок, поэтому он содержит первое SSL-соединение данных, к которому продолжают добавляться данные при каждом чтении данных из новых сокетов.
Самое простое решение - переместить определение request_buffer в то же место, что и объект запроса. Или вы можете потреблять необработанных данных, прежде чем вернуться к началу цикла.