diff options
author | Andreas Kling <kling@serenityos.org> | 2020-07-27 19:50:24 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-07-27 19:57:20 +0200 |
commit | 7f70a6f0cbeff93c59e86885ed9b40711753b5d2 (patch) | |
tree | ea945392a79d832f42195b16d5e9b9ee9f0fbade /Services/WebServer | |
parent | 78518d230c3aae0071a8643cafde7152b9c6d0de (diff) | |
download | serenity-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.cpp | 13 | ||||
-rw-r--r-- | Services/WebServer/Client.h | 2 |
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(); |