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; std::string requestTypeString;
ss >> requestTypeString; ss >> requestTypeString;
request.requestType = ToEnum<HttpRequest::Type>(requestTypeString, HttpRequest::typeStrings); request.type = ToEnum<HttpRequest::Type>(requestTypeString, HttpRequest::typeStrings);
if (request.requestType == HttpRequest::Type::UNKNOWN) if (request.type == HttpRequest::Type::UNKNOWN)
{ {
throw std::runtime_error("Bad request type"); throw std::runtime_error("Bad request type");
} }

View File

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

View File

@@ -6,12 +6,15 @@ namespace Middleware
{ {
void NotFound::HandleRequest(Http::Request const & request, Http::Response & response) 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; return;
} }
response.code = HttpResponse::Code::NOT_FOUND; response.code = HttpResponse::Code::NOT_FOUND;
if (request.type == HttpRequest::Type::GET)
{
response.contentType = Http::GetMimeType(Http::FileType::HTML); response.contentType = Http::GetMimeType(Http::FileType::HTML);
std::stringstream ss; std::stringstream ss;
@@ -25,6 +28,7 @@ namespace Middleware
responseContent.begin(), responseContent.begin(),
responseContent.end()); responseContent.end());
} }
}
NotFound::NotFound(Logger & _logger) NotFound::NotFound(Logger & _logger)
: BaseMiddleware(_logger) : BaseMiddleware(_logger)

View File

@@ -50,16 +50,10 @@ namespace Middleware
void StaticContent::HandleRequest(Http::Request const & request, Http::Response & response) 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; std::string path;
if (request.url.HasPath()) if (request.url.HasPath())
@@ -79,7 +73,7 @@ namespace Middleware
return; return;
} }
if (!TryReadAllBytes(path, response.content)) if (request.type == HttpRequest::Type::GET && !TryReadAllBytes(path, response.content))
{ {
return; return;
} }

View File

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