Вывод моего HTTP-сервера явно недействителен. Как его отладить?

Предыстория: у меня есть собственный HTTP-сервер, написанный на Erlang для потоковой передачи данных в приложение для iPad. Я использовал NSURLConnection — стандартный высокоуровневый способ Apple для потребления HTTP-контента. Однако у меня были проблемы с буферизацией небольших фрагментов данных, которые не сразу передавались моему коду, поэтому я был вынужден переключиться на CFNetwork.

В то время как NSURLConnection никогда не жаловался, CFNetwork иногда (~ 1 из 3 раз) выдает следующую ошибку и убивает соединение:

The operation couldn’t be completed. (kCFErrorDomainCFNetwork error 303.)

Согласно Apple docs, это соответствует «Не удалось проанализировать ответ HTTP-сервера».

Это происходит только после того, как соединение было открыто в течение нескольких секунд и был сделан ответ.

Я сделал захват пакетов на сервере с помощью tshark. Он довольно большой и содержит кодировку UTF-8, а также конфиденциальные данные.

Как я могу проверить, что это действительный сегментированный ответ HTTP 1.1?

Просто чтобы уточнить, я просмотрел результат tcpick -C -yP -r ... и сразу не увидел ничего неправильного, но мне интересно, есть ли что-нибудь, что я могу передать, чтобы подтвердить, что он байт за байтом действителен.


person Max    schedule 08.10.2012    source источник


Ответы (2)


Оказывается, проблема заключалась в том, что sndbuf на веб-сервере Erlang было установлено слишком низкое значение.

Это была 5-часовая трата времени на сканирование перехваченных пакетов, реализацию фрагментированного HTTP с помощью CFStream с нуля и т. д. и т. д.

person Max    schedule 08.10.2012

Как я могу проверить, что это действительный сегментированный ответ HTTP 1.1?

Подтвердив, что кодирование фрагментированной передачи является реализован правильно.

person CodeCaster    schedule 08.10.2012
comment
Хотите уточнить? Насколько я могу судить, реализация надежна, насколько я могу судить, дамп пакетов надежен (хотя он довольно большой, поэтому мой поиск был несколько поверхностным), но CFNetwork говорит мне, что это не надежно. Если не считать того, что я пишу HTTP-клиент для использования захвата пакета для его проверки, могу ли я что-нибудь сделать для его проверки? - person Max; 08.10.2012