【问题标题】:Paw returns wrong web page compared to browsers与浏览器相比,Paw 返回错误的网页
【发布时间】:2015-04-29 17:19:39
【问题描述】:

请求似乎发送到了错误的主机(不完全确定它们被发送到哪个主机,因为该响应可以由 4 个不同的服务器发送)。

Chrome 返回正确的 JSON 响应:

还有 Paw 的 NSURLConnection 库:

但默认的 Paw HTTP Library 返回 404 Not Found :

【问题讨论】:

    标签: rest ipv6 ipv4 paw-app


    【解决方案1】:

    您实际上有 2 台本地服务器在侦听端口 8000,一台仅侦听 IPv6 连接(注意:这是 PHP 应用程序的默认设置),另一台侦听 IPv4 连接。

    当您连接到“localhost”时,您没有指定要使用的 IP 协议,听起来大多数客户端(包括 Paw 中的 Chrome、ASIHTTPRequest 和 NSURLConnection)都选择首先连接到 IPv6。而 Paw HTTP 库选择连接到 IPv4(我们做出这个选择是因为 IPv4 仍然被广泛使用,并且希望尽可能避免错误)

    因此,当您运行指定 localhost:8000 的主 Web 应用程序时,服务器(在您的情况下为 PHP)实际上会监听 [::1]:8000(这是 IPv6 等价于 127.0.0.1:8000),我猜您的其他服务器会监听实际 IPv4 127.0.0.1:8000。 Chrome 和其他库连接到[::1]:8000 (IPv6) 并获取您的主要 PHP 应用程序,而“Paw HTTP 库”连接到您的其他服务器的127.0.0.1:8000 (IPv4),它返回我们可以在视频中看到的 404 .

    您需要做的是指定实际 IP 而不是localhost。使用 http://[::1]:8000/plans 连接到侦听 IPv6 的主应用。

    【讨论】:

    • 您没有避免错误,而是引入了错误。您应该首先通过 Happy Eyeballs 算法连接到 IPv6。
    • 感谢@MichaelHampton,Happy Eyeballs 算法绝对是答案。我对IP网络没有深入的了解,我认为应该在TCP网络层面解决,所以我在库Paw的repo上添加了一个问题正在使用github.com/robbiehanson/CocoaAsyncSocket/issues/315
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2014-09-16
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多