HEAD support
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace Http
|
||||
{
|
||||
struct Request
|
||||
{
|
||||
HttpRequest::Type requestType;
|
||||
HttpRequest::Type type;
|
||||
Url url;
|
||||
|
||||
static Request Deserialize(std::vector<char> const & bytes);
|
||||
|
||||
@@ -6,12 +6,15 @@ 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;
|
||||
if (request.type == HttpRequest::Type::GET)
|
||||
{
|
||||
response.contentType = Http::GetMimeType(Http::FileType::HTML);
|
||||
|
||||
std::stringstream ss;
|
||||
@@ -25,6 +28,7 @@ namespace Middleware
|
||||
responseContent.begin(),
|
||||
responseContent.end());
|
||||
}
|
||||
}
|
||||
|
||||
NotFound::NotFound(Logger & _logger)
|
||||
: BaseMiddleware(_logger)
|
||||
|
||||
@@ -50,16 +50,10 @@ namespace Middleware
|
||||
|
||||
void StaticContent::HandleRequest(Http::Request const & request, Http::Response & response)
|
||||
{
|
||||
switch(request.requestType)
|
||||
{
|
||||
case HttpRequest::Type::GET:
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!(request.type == HttpRequest::Type::GET || request.type == HttpRequest::Type::HEAD))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
std::string path;
|
||||
if (request.url.HasPath())
|
||||
@@ -79,7 +73,7 @@ namespace Middleware
|
||||
return;
|
||||
}
|
||||
|
||||
if (!TryReadAllBytes(path, response.content))
|
||||
if (request.type == HttpRequest::Type::GET && !TryReadAllBytes(path, response.content))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -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 << '>';
|
||||
|
||||
Reference in New Issue
Block a user