Пример Boost http-сервера не работает?

Я скопировал файлы (с "HTTP-сервера") из это руководство, но кажется, что оно не работает. Я запустил приложение с 0.0.0.0 5000 ., но когда я пытаюсь подключиться к странице localhost:5000, я всегда получаю 404 Not Found. Что сделать, чтобы он запустился?


person sop    schedule 27.02.2015    source источник
comment
Что, если вы привязываетесь к 127.0.0.1 вместо 0.0.0.0?   -  person Sam Miller    schedule 27.02.2015
comment
Не могли бы вы подробнее описать настройку? Каковы ожидаемые результаты? Какой файл вы пытаетесь обслуживать? Где он находится в файловой системе? Какой точный URL вы запрашиваете в браузере?   -  person Tanner Sansbury    schedule 02.03.2015


Ответы (1)


Если вы получаете HTTP-ответ с кодом состояния 404, то HTTP-сервер работает, обрабатывает запрос и отправляет ответ. Если бы сервер не работал, ответ HTTP не возвращался бы. Браузер может предоставить дополнительные сведения об ошибке:

$ lsof -i tcp:5000 # verify nothing is listening to port 5000
$ curl http://localhost:5000/
curl: (7) Failed to connect to localhost port 5000: Connection refused

Убедитесь, что путь, запрашиваемый в HTTP-запросе, существует в каталоге, соответствующем параметру doc_root, указанному при запуске сервера. Также имейте в виду, что если путь запроса заканчивается на /, сервер добавит к пути index.html. Как показано в code, если серверу не удается открыть файл, указанный путем, сервер ответит HTTP-ответом с кодом состояния 404.

// Open the file to send back.
std::string full_path = doc_root_ + request_path;
std::ifstream is(full_path.c_str(), std::ios::in | std::ios::binary);
if (!is)
{
  rep = reply::stock_reply(reply::not_found);
  return;
}
person Tanner Sansbury    schedule 27.02.2015
comment
Он возвращает: <html><head><title>Not Found</title></head><body><h1>404 Not Found</h1></body></html> - person sop; 02.03.2015
comment
@sop понял. Если бы сервер не работал, то ответа HTTP не было бы, так как он не работал бы на более низком уровне, таком как транспортный уровень TCP. Убедитесь, что doc_root содержит файлы, запрашиваемые в HTTP-запросе. - person Tanner Sansbury; 02.03.2015
comment
Где находится doc_root? - person sop; 03.03.2015
comment
doc_root — это третий аргумент, предоставляемый программе при запуске: https://github.com/boostorg/asio/blob/boost-1.57.0/example/cpp11/http/server/main.cpp#L23. - person Tanner Sansbury; 03.03.2015
comment
какие файлы запрашиваются? - person sop; 03.03.2015
comment
@sop Пожалуйста, обновите свой вопрос, добавив ответы на вопросы в комментариях. - person Tanner Sansbury; 03.03.2015