Спешу сообщить, что то, что ходит в интернете под видом HTTP-трафика, иногда заметно отличается от того, что написано в RFC. Например:
- По идее, заголовки должны быть разделены полноценным \r\n. Но и простой \n иногда встречается.
- Бывает, что присутствуют несколько заголовков с одинаковым именем (я говорю про случаи, когда RFC это однозначно запрещает).
- Встречаются пустые заголовки.
- С компрессией - тоже весело. В исходниках firefox'а я нашел специальный workaround для апача с mod_deflate, который не формирует zlib'овский заголовок перед данными. Код примерно такой: "Распаковываем. Ошибка? Ну тогда подставляем фейковый заголовок, а потом начинаем распаковывать заново. Снова ошибка? Ну, значит, не судьба".
- По идее, заголовки должны быть разделены полноценным \r\n. Но и простой \n иногда встречается.
- Бывает, что присутствуют несколько заголовков с одинаковым именем (я говорю про случаи, когда RFC это однозначно запрещает).
- Встречаются пустые заголовки.
- С компрессией - тоже весело. В исходниках firefox'а я нашел специальный workaround для апача с mod_deflate, который не формирует zlib'овский заголовок перед данными. Код примерно такой: "Распаковываем. Ошибка? Ну тогда подставляем фейковый заголовок, а потом начинаем распаковывать заново. Снова ошибка? Ну, значит, не судьба".