http://0:port 谁错了?

Who is wrong about the http://0:port?

Plack 套件通常使用 http://0:port。例如。以下

plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");'

打印

HTTP::Server::PSGI: Accepting connections at http://0:5000/

然而,LWP::UserAgent(或一些更深层次的调用模块)不接受它,例如该:

perl -MLWP::UserAgent -E '$u=LWP::UserAgent->new;$res=$u->get("http://0:5000/valid/path");print $res->status_line'

打印:

500 No Host option provided

但是

perl -MLWP::UserAgent -E '$u=LWP::UserAgent->new;$res=$u->get("http://localhost:5000/valid/path");print $res->status_line'

打印

200 OK

问题是:谁错了?

Plack 套件的输出是服务器 的输出。服务器通常 binds 到某个端口和地址的套接字,以便在那里提供内容。 在这种情况下,符号 http://0:port 表示: listen on port port on all addresses of this machine .如果您不知道或不想指定应该可以访问服务器的计算机的所有地址,这将很方便。

LWP::UserAgent 的输出是 客户端 的输出。为了打开与服务器的连接,您必须明确指定地址要连接的端口。 0 不是有效的 IP 地址,因此当您 connecthttp://0:port 时连接失败。

Safari 11、curl 和 wget 将 http://0:5000 解析为 http://0.0.0.0:5000 并连接到本地主机。

刚刚测试了一下,看到URL发现问题的答案不满意