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
问题是:谁错了?
http://0:port
有效吗,例如LWP"错误">- 或者它无效,PSGI将其用作唯一"随机有效"的快捷方式
Plack套件的输出是服务器的输出。服务器通常bind
为某个端口和地址提供套接字,以便在那里提供内容。符号http://0:port
在这种情况下意味着:在上的端口port
上侦听此机器的所有地址。如果您不知道或不想指定服务器应该可访问的机器的所有地址,这很方便。
LWP::UserAgent的输出是客户端的输出。为了打开与服务器的连接,必须显式指定地址和要连接的端口。0
不是有效的IP地址,因此连接到http://0:port
时连接失败。
Safari 11、curl和wget将http://0:5000
解析为http://0.0.0.0:5000
并连接到本地主机。
我只是测试了一下,在看到URL并发现问题的答案不满意之后。