HEAD support

This commit is contained in:
2019-06-19 19:20:10 +02:00
parent 0004064a27
commit d8cfca8fc5
5 changed files with 23 additions and 25 deletions

View File

@@ -26,8 +26,8 @@ namespace Http
std::string requestTypeString;
ss >> requestTypeString;
request.requestType = ToEnum<HttpRequest::Type>(requestTypeString, HttpRequest::typeStrings);
if (request.requestType == HttpRequest::Type::UNKNOWN)
request.type = ToEnum<HttpRequest::Type>(requestTypeString, HttpRequest::typeStrings);
if (request.type == HttpRequest::Type::UNKNOWN)
{
throw std::runtime_error("Bad request type");
}

View File

@@ -6,7 +6,7 @@ namespace Http
{
struct Request
{
HttpRequest::Type requestType;
HttpRequest::Type type;
Url url;
static Request Deserialize(std::vector<char> const & bytes);

View File

@@ -6,24 +6,28 @@ namespace Middleware
{
void NotFound::HandleRequest(Http::Request const & request, Http::Response & response)
{
if (response.code != HttpResponse::Code::UNKNOWN || request.requestType != HttpRequest::Type::GET)
if (response.code != HttpResponse::Code::UNKNOWN &&
!(request.type == HttpRequest::Type::GET || request.type == HttpRequest::Type::HEAD))
{
return;
}
response.code = HttpResponse::Code::NOT_FOUND;
response.contentType = Http::GetMimeType(Http::FileType::HTML);
std::stringstream ss;
ss << "<!DOCTYPE html><html><head></head><body>";
ss << "<h1>404 - File Not Found</h1>";
ss << "<p>File: " << request.url.GetPath() << "<p>";
ss << "</body></html>";
if (request.type == HttpRequest::Type::GET)
{
response.contentType = Http::GetMimeType(Http::FileType::HTML);
std::stringstream ss;
ss << "<!DOCTYPE html><html><head></head><body>";
ss << "<h1>404 - File Not Found</h1>";
ss << "<p>File: " << request.url.GetPath() << "<p>";
ss << "</body></html>";
auto responseContent = ss.str();
response.content.insert(response.content.begin(),
responseContent.begin(),
responseContent.end());
auto responseContent = ss.str();
response.content.insert(response.content.begin(),
responseContent.begin(),
responseContent.end());
}
}
NotFound::NotFound(Logger & _logger)

View File

@@ -50,15 +50,9 @@ namespace Middleware
void StaticContent::HandleRequest(Http::Request const & request, Http::Response & response)
{
switch(request.requestType)
if (!(request.type == HttpRequest::Type::GET || request.type == HttpRequest::Type::HEAD))
{
case HttpRequest::Type::GET:
break;
default:
{
return;
}
return;
}
std::string path;
@@ -79,7 +73,7 @@ namespace Middleware
return;
}
if (!TryReadAllBytes(path, response.content))
if (request.type == HttpRequest::Type::GET && !TryReadAllBytes(path, response.content))
{
return;
}

View File

@@ -50,7 +50,7 @@ void ConnectionOperator::HandleNewConnection(ClientSocket const & newClient)
{
std::stringstream ss;
ss << "Unhandled ";
ss << HttpRequest::typeStrings[static_cast<int>(request.requestType)];
ss << HttpRequest::typeStrings[static_cast<int>(request.type)];
ss << " request for file <";
ss << request.url.GetPath();
ss << '>';