Kilka lat temu, dobrze pamiętam, napisałem aplikację do obsługi remiq.net (teraz kyon.pl) na moją komórkę, Nokię 6060. Została ona pokazana jednemu z doktorów na WI w celu uzyskania oceny, a jakiś czas później użyta w Tatrach (dla celów propagandowych). Co się dalej stało z kodem źródłowym? Nie wie tego nikt.
Dni temu trzy, odpaliłem moją nową aplikację (klient Librarii) na moim telefonie, co zaowocowało zawieszeniem się systemu. Rzecz dziwna, choć dziwnie znajoma. Choć w emulatorze wszystko działało poprawnie, jakakolwiek komunikacja z serwerem w telefonie kończyła się tak samo. Chwileczkę, pomyślałem, przecież już ten problem rozwiązałem! Szybkie poszukiwanie kodu - nie ma. Trzeba wymyślić koło na nowo.
Trzy dni później, po intensywnym debugowaniu, sniffowanie własnego serwera www dało efekt:
HTTP/1.1.200..
Server:.nginx/0.5.35..
Na pierwszy rzut oka, jakby czegoś w tym brakowało.
Jak można przeczytać na Phusion Passenger (cokolwiek to jest):
Nginx: ensure that the response line contains an HTTP reason phrase
If the backend application didn’t sent a reason phrase (e.g. the “OK” part of “200 OK”) then the response sent by Nginx won’t contain a reason phrase as well. This breaks Ajax requests on Internet Explorer, and probably some other browsers as well.
I faktycznie, teraz widać, co brakowało w pokazanym wyżej pakiecie. Czy jednak to spowodowało błąd w Nokii?
Szybki test poprzez odpalenie Catalysta z pominięciem nginxa - hmm, dziwnie znajoma metoda. I nagłe wspomnienie jak robię to samo u tego doktora na WI, tłumacząc że nginx ma nieokreślony błąd, ale bezpośrednie połączenie działa właściwie.
Rozwiązanie:
Należało zmienić w pliku Catalyst::Engine::CGI $res_headers->header( Status => $status ); na $res_headers->header( Status => $status." ".status_message($status) ); i dodać use HTTP::Status; na początku pliku.
Keywords: j2me, java, httpconnection, hangs, freeze, nginx, 6060, nokia, reason phrase.
!Ona (0/0)