Изходът на моя HTTP сървър очевидно е невалиден. Как да го отстраня?

Предистория: Имам персонализиран HTTP сървър, написан на Erlang, за да предавам поточно неща към приложение за iPad. Използвах NSURLConnection - стандартният начин на високо ниво на Apple за консумиране на HTTP съдържание. Въпреки това имах проблеми с малки части от данни, които се буферират и не се предават незабавно на моя код, така че бях принуден да премина към CFNetwork.

Докато NSURLConnection никога не се е оплаквал, CFNetwork понякога (~1 на 3 пъти) дава следната грешка и убива връзката:

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

Според Документи на Apple, това съответства на „Отговорът на 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