谁对http://0:端口说错了



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并发现问题的答案不满意之后。

相关内容

  • 没有找到相关文章