Веб-сервер с HTTP :: Daemon, HTML не отображается - PullRequest
0 голосов
/ 20 сентября 2011

Я нашел способ создать быстрый веб-сервер на Perl:

#!/usr/bin/env perl -s -wl

use strict;

use HTTP::Daemon;
use HTTP::Headers;
use HTTP::Response;

sub help {
    print "$0 -port=<port-number>";
}

our $port;
our $addr = "localhost";

$port = 9000 unless defined $port;

my $server = HTTP::Daemon->new(
    LocalAddr => $addr,
    LocalPort => $port,
    Listen => 1,
    Reuse => 1,
);

die "$0: Could not setup server" unless $server;
print "$0: http://$addr:$port Accepting clients";

while (my $client = $server->accept()) {
    print "$0: Client received";

    $client->autoflush(1);

    my $request = $client->get_request;

    print "$0: Client's Request Received";
    print "$0: Request: " . $request->method;

    if ($request->method eq 'GET') {
        my $header = HTTP::Headers->new;
        $header->date( time );
        $header->server("$0");
        $header->content_type('text/html');

        my $content = "<!doctype html><html><head><title>Hello World</title></head><body><h1>Hello World!</h1></body></html>";
        my $response = HTTP::Response->new(200);
        $response->content($content);
        $response->header("Content-Type" => "text/html");

        $client->send_response($response);
    }

    print "$0: Closed";

    $client->close;
    undef($client);
}

Но по какой-то причине каждый раз, когда я получаю доступ к localhost:9000, он отображает часть заголовка HTTP - дату, сервер, длину контента и тип контента - и контент. Он не отображается как HTML-страница. Я что-то упускаю?

1 Ответ

4 голосов
/ 20 сентября 2011

Это вызвано переключателем -l:

#!/usr/bin/env perl -s -wl
                         ^

Он устанавливает в качестве разделителя выходной записи значение разделителя входной записи (новую строку), что приводит к добавлению дополнительных строк новой строки в вывод HTTP-сервера и прерыванию ответа HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...