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是"错误" 答案 0 :(得分:6)
Plack套件的输出是服务器的输出。服务器通常bind
s到某个端口和地址的套接字,以便在那里提供内容。
在这种情况下,符号http://0:port
表示: listen在此机器的所有地址上的端口port
上。如果您不知道或不想指定服务器应该可以到达的机器的所有地址,这很方便。
LWP :: UserAgent的输出是客户端的输出。要打开与服务器的连接,必须明确指定要连接的端口和。 0
没有有效的IP地址,因此当您connect到http://0:port
时连接失败。
答案 1 :(得分:0)
Safari 11,curl和wget将http://0:5000
解析为http://0.0.0.0:5000
并连接到localhost。
我在看到网址并找到不满意的问题的答案后,就测试了它。