@@ -509,7 +509,7 @@ class Server {
509
509
bool listen_internal ();
510
510
511
511
bool routing (Request &req, Response &res, Stream &strm, bool last_connection);
512
- bool handle_file_request (Request &req, Response &res);
512
+ bool handle_file_request (Request &req, Response &res, bool head = false );
513
513
bool dispatch_request (Request &req, Response &res, Handlers &handlers);
514
514
bool dispatch_request_for_content_reader (Request &req, Response &res,
515
515
ContentReader content_reader,
@@ -3212,7 +3212,7 @@ inline bool Server::read_content_core(Stream &strm, bool last_connection,
3212
3212
return true ;
3213
3213
}
3214
3214
3215
- inline bool Server::handle_file_request (Request &req, Response &res) {
3215
+ inline bool Server::handle_file_request (Request &req, Response &res, bool head ) {
3216
3216
for (const auto &kv : base_dirs_) {
3217
3217
const auto &mount_point = kv.first ;
3218
3218
const auto &base_dir = kv.second ;
@@ -3230,7 +3230,7 @@ inline bool Server::handle_file_request(Request &req, Response &res) {
3230
3230
detail::find_content_type (path, file_extension_and_mimetype_map_);
3231
3231
if (type) { res.set_header (" Content-Type" , type); }
3232
3232
res.status = 200 ;
3233
- if (file_request_handler_) { file_request_handler_ (req, res); }
3233
+ if (!head && file_request_handler_) { file_request_handler_ (req, res); }
3234
3234
return true ;
3235
3235
}
3236
3236
}
@@ -3331,7 +3331,8 @@ inline bool Server::listen_internal() {
3331
3331
inline bool Server::routing (Request &req, Response &res, Stream &strm,
3332
3332
bool last_connection) {
3333
3333
// File handler
3334
- if (req.method == " GET" && handle_file_request (req, res)) { return true ; }
3334
+ bool is_head_request = req.method == " HEAD" ;
3335
+ if ((req.method == " GET" || is_head_request) && handle_file_request (req, res, is_head_request)) { return true ; }
3335
3336
3336
3337
if (detail::expect_content (req)) {
3337
3338
// Content reader handler
0 commit comments