2015-04-29 6 views
0

Запросы отправляются на неправильный хост (не совсем уверен, какой хост они отправляются, поскольку этот ответ может быть отправлен на 4 разных серверах).Paw возвращает неверную веб-страницу по сравнению с браузерами

Chrome возвращает правильный ответ JSON:

Chrome returns the valid JSON

Paw-х NSURLConnection библиотека тоже:

enter image description here

Но по умолчанию Paw HTTP Library возвращающую 404 Not Found:

enter image description here

ответ

0

У вас на самом деле 2 локальных сервера, прослушивающих порт 8000, один прослушивает только соединения IPv6 (обратите внимание: это значение по умолчанию для приложений PHP), а другое - для соединений IPv4.

Когда вы подключаетесь к «localhost», вы не указываете, какой IP-протокол вы хотите использовать, и это похоже на то, что большинство клиентов (включая Chrome, ASIHTTPRequest и NSURLConnection в Paw) выбирают сначала подключение к IPv6. В то время как библиотека HTTP Paw выбирает подключение к IPv4 (мы сделали этот выбор, поскольку IPv4 по-прежнему широко используется и хотел как можно больше избегать ошибок).

Так что, когда вы запускаете ваш основной веб-приложение с указанием localhost:8000 сервера (PHP в вашем случае) на самом деле прислушивается к [::1]:8000 (что эквивалентно IPv6 к 127.0.0.1:8000), и я предполагаю, что другой сервер прослушивает фактической IPv4 127.0.0.1:8000. Chrome и другие библиотеки подключаются к [::1]:8000 (IPv6) и получают ваше основное приложение PHP, тогда как «HTTP-библиотека Paw» подключается к 127.0.0.1:8000 (IPv4), которая попадает на ваш другой сервер, который возвращает 404, которые мы видим в видео.

Что вам нужно сделать, это указать фактический IP вместо localhost. Используйте http://[::1]:8000/plans для подключения к главному приложению, которое прослушивает IPv6.

+0

Вместо того чтобы избегать ошибки, вы _introduced_ ошибка. Сначала вы должны подключиться к IPv6, используя алгоритм Happy Eyeballs. –

+0

Спасибо @MichaelHampton, алгоритм Happy Eyeballs окончательно является ответом. У меня нет глубоких знаний об IP-сетях, и я считаю, что он должен быть разрешен на уровне сети TCP, поэтому я добавил проблему в репо библиотеки. Paw использует https://github.com/robbiehanson/CocoaAsyncSocket/вопросы/315 –