Set default 'Server' header only if it isn't set.

Closes #996.
This commit is contained in:
lu4nm3 2019-05-08 14:51:19 -07:00 committed by Sergio Benitez
parent 99afa7d5f7
commit 0a068b0dd6
2 changed files with 48 additions and 2 deletions

View File

@ -216,9 +216,12 @@ impl Rocket {
// Route the request and run the user's handlers. // Route the request and run the user's handlers.
let mut response = self.route_and_process(request, data); let mut response = self.route_and_process(request, data);
// Add the 'rocket' server header to the response and run fairings. // Add the 'rocket' server header to the response and run fairings only if the header
// doesn't already exist.
// TODO: If removing Hyper, write out `Date` header too. // TODO: If removing Hyper, write out `Date` header too.
response.set_header(Header::new("Server", "Rocket")); if !response.headers().contains("Server") {
response.set_header(Header::new("Server", "Rocket"));
}
self.fairings.handle_response(request, &mut response); self.fairings.handle_response(request, &mut response);
// Strip the body if this is a `HEAD` request. // Strip the body if this is a `HEAD` request.

View File

@ -0,0 +1,43 @@
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use]
extern crate rocket;
extern crate rocket_http;
use rocket::response::Redirect;
use rocket::Response;
use rocket_http::{Header, Status};
#[get("/do_not_overwrite")]
fn do_not_overwrite<'r>() -> Result<Response<'r>, ()> {
let header = Header::new("Server", "Test");
Response::build()
.header(header)
.ok()
}
#[get("/use_default")]
fn use_default<'r>() -> Result<Response<'r>, ()> {
Response::build()
.ok()
}
mod conditionally_set_server_header {
use super::*;
use rocket::local::Client;
#[test]
fn do_not_overwrite_server_header() {
let rocket = rocket::ignite().mount("/", routes![do_not_overwrite, use_default]);
let client = Client::new(rocket).unwrap();
let response = client.get("/do_not_overwrite").dispatch();
let server = response.headers().get_one("Server");
assert_eq!(server, Some("Test"));
let response = client.get("/use_default").dispatch();
let server = response.headers().get_one("Server");
assert_eq!(server, Some("Rocket"));
}
}