Server::respond_with_static_file() for better control over static files #1927
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Alternative approach to #1906
This approach allows library user to still get the benefits of httplib, in particular the valid_path() check and the directory redirect.
The current fix
set_file_content()
is good but skips those things.Plus, it segfaults when I ask it to
set_file_content(a directory)
.Can now handle static file requests the same as any Get() request, meaning the handler's priority can be controlled by the developer.
ie
svr.Get("/something", [](auto req, auto res) {
dont return the file "something";
instead, return something else;
});
svr.GET("/(.*)", [](auto req, auto res) {
// chance to further filter or adjust request to suit
auto result = svr.respond_with_static_file(
req, res, req.matches[1], "base_dir");
// optional chance to override response from the default
switch (result) {
SFR_DirRedirect: break;
SFR_File: break; // chance to set additional headers
SFR_CouldNotOpen: break; // chance to respond nicely
SFR_NotFound: break; // chance to respond nicely
}
});