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