@@ -21,27 +21,33 @@ struct helmet_options
2121{
2222 using helmet_pair = std::pair<std::string, std::vector<std::string>>;
2323 using helmet_map = std::vector<helmet_pair>;
24+ using cached_pair = std::pair<std::string, std::string>;
25+ using cached_vector = std::vector<cached_pair>;
2426
2527 // / \brief {key, enabled}
2628 // / \note i.e {bad-header, ""} <-- disabled
27- helmet_map requestHeaders = {
28- {" Content-Security-Policy" , {" default-src 'self'" , " base-uri 'self'" , " font-src 'self' https: data:" , " form-action 'self'" , " frame-ancestors 'self'" ,
29- " img-src 'self' data:" , " object-src 'none'" , " script-src 'self'" , " script-src-attr 'none'" , " style-src 'self' https: 'unsafe-inline'" , " upgrade-insecure-requests" }},
30- {" Cross-Origin-Embedder-Policy" , {" require-corp" }},
31- {" Cross-Origin-Opener-Policy" , {" same-origin" }},
32- {" Cross-Origin-Resource-Policy" , {" same-origin" }},
33- {" X-DNS-Prefetch-Control" , {" off" }},
34- {" Expect-CT" , {" max-age=86400, enforce" }},
35- {" X-Frame-Options" , {" SAMEORIGIN" }},
36- {" X-Powered-By" , {" " }}, // Remove this header
37- {" Strict-Transport-Security" , {" max-age=15552000" , " includeSubDomains" }},
38- {" X-Download-Options" , {" noopen" }},
39- {" X-Content-Type-Options" , {" nosniff" }},
40- {" Origin-Agent-Cluster" , {" ?1" }},
41- {" X-Permitted-Cross-Domain-Policies" , {" none" }},
42- {" Referrer-Policy" , {" no-referrer" }},
43- {" X-XSS-Protection" , {" 0" }} // Disabled as modern browsers have better protections
44- };
29+ struct helmet_headers_option {
30+ helmet_map headers = {
31+ {" Content-Security-Policy" , {" default-src 'self'" , " base-uri 'self'" , " font-src 'self' https: data:" , " form-action 'self'" , " frame-ancestors 'self'" ,
32+ " img-src 'self' data:" , " object-src 'none'" , " script-src 'self'" , " script-src-attr 'none'" , " style-src 'self' https: 'unsafe-inline'" , " upgrade-insecure-requests" }},
33+ {" Cross-Origin-Embedder-Policy" , {" require-corp" }},
34+ {" Cross-Origin-Opener-Policy" , {" same-origin" }},
35+ {" Cross-Origin-Resource-Policy" , {" same-origin" }},
36+ {" X-DNS-Prefetch-Control" , {" off" }},
37+ {" Expect-CT" , {" max-age=86400, enforce" }},
38+ {" X-Frame-Options" , {" SAMEORIGIN" }},
39+ {" X-Powered-By" , {" " }}, // Remove this header
40+ {" Strict-Transport-Security" , {" max-age=15552000" , " includeSubDomains" }},
41+ {" X-Download-Options" , {" noopen" }},
42+ {" X-Content-Type-Options" , {" nosniff" }},
43+ {" Origin-Agent-Cluster" , {" ?1" }},
44+ {" X-Permitted-Cross-Domain-Policies" , {" none" }},
45+ {" Referrer-Policy" , {" no-referrer" }},
46+ {" X-XSS-Protection" , {" 0" }} // Disabled as modern browsers have better protections
47+ };
48+
49+ cached_vector cachedHeaders;
50+ } requestHeaders;
4551};
4652
4753// / \brief Middleware inspired by express.js concept of helmets.
0 commit comments