summaryrefslogtreecommitdiff
path: root/Services/WebServer
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-07-27 19:50:24 +0200
committerAndreas Kling <kling@serenityos.org>2020-07-27 19:57:20 +0200
commit7f70a6f0cbeff93c59e86885ed9b40711753b5d2 (patch)
treeea945392a79d832f42195b16d5e9b9ee9f0fbade /Services/WebServer
parent78518d230c3aae0071a8643cafde7152b9c6d0de (diff)
downloadserenity-7f70a6f0cbeff93c59e86885ed9b40711753b5d2.zip
WebServer: Try to send an appopriate Content-Type header
Use Core::guess_mime_type_based_on_filename() for this. It's obviously not perfect, but it works better than just sending "text/html" for everything no matter what. :^)
Diffstat (limited to 'Services/WebServer')
-rw-r--r--Services/WebServer/Client.cpp13
-rw-r--r--Services/WebServer/Client.h2
2 files changed, 9 insertions, 6 deletions
diff --git a/Services/WebServer/Client.cpp b/Services/WebServer/Client.cpp
index 37bafda560..833757b818 100644
--- a/Services/WebServer/Client.cpp
+++ b/Services/WebServer/Client.cpp
@@ -25,12 +25,13 @@
*/
#include "Client.h"
-#include <AK/URLParser.h>
#include <AK/LexicalPath.h>
#include <AK/StringBuilder.h>
+#include <AK/URLParser.h>
#include <LibCore/DateTime.h>
#include <LibCore/DirIterator.h>
#include <LibCore/File.h>
+#include <LibCore/MimeData.h>
#include <LibHTTP/HttpRequest.h>
#include <stdio.h>
#include <sys/stat.h>
@@ -122,15 +123,17 @@ void Client::handle_request(ByteBuffer raw_request)
return;
}
- send_response(file->read_all(), request);
+ send_response(file->read_all(), request, Core::guess_mime_type_based_on_filename(request.url()));
}
-void Client::send_response(StringView response, const HTTP::HttpRequest& request)
+void Client::send_response(StringView response, const HTTP::HttpRequest& request, const String& content_type)
{
StringBuilder builder;
builder.append("HTTP/1.0 200 OK\r\n");
builder.append("Server: WebServer (SerenityOS)\r\n");
- builder.append("Content-Type: text/html\r\n");
+ builder.append("Content-Type: ");
+ builder.append(content_type);
+ builder.append("\r\n");
builder.append("\r\n");
m_socket->write(builder.to_string());
@@ -201,7 +204,7 @@ void Client::handle_directory_listing(const String& requested_path, const String
builder.append("</body>\n");
builder.append("</html>\n");
- send_response(builder.to_string(), request);
+ send_response(builder.to_string(), request, "text/html");
}
void Client::send_error_response(unsigned code, const StringView& message, const HTTP::HttpRequest& request)
diff --git a/Services/WebServer/Client.h b/Services/WebServer/Client.h
index d7791b3898..6b078bb568 100644
--- a/Services/WebServer/Client.h
+++ b/Services/WebServer/Client.h
@@ -42,7 +42,7 @@ private:
Client(NonnullRefPtr<Core::TCPSocket>, const String&, Core::Object* parent);
void handle_request(ByteBuffer);
- void send_response(StringView, const HTTP::HttpRequest&);
+ void send_response(StringView, const HTTP::HttpRequest&, const String& content_type);
void send_redirect(StringView redirect, const HTTP::HttpRequest& request);
void send_error_response(unsigned code, const StringView& message, const HTTP::HttpRequest&);
void die();