谁对http:// 0:port错了?

时间:2015-07-06 09:51:47

标签: perl lwp psgi

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仅将其用作"随机有效"快捷键?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

Safari 11,curl和wget将http://0:5000解析为http://0.0.0.0:5000并连接到localhost。

我在看到网址并找到不满意的问题的答案后,就测试了它。