7

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 将它用作仅“随机有效”的快捷方式?
4

2 回答 2

6

Plack 套件的输出是服务器的输出。服务器通常bind到某个端口和地址的套接字,以便在那里提供内容。http://0:port在这种情况下,表示法的意思是:在这台机器的所有地址侦听端口port。如果您不知道或不想指定应该可以访问服务器的机器的所有地址,这很方便。

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

于 2015-07-06T10:21:35.113 回答
0

Safari 11、curl 和 wget 解析并连接到 localhost http://0:5000http://0.0.0.0:5000

在看到 URL 并找到不满意问题的答案后,我刚刚对其进行了测试。

于 2017-11-14T21:27:11.663 回答