| 1193 | } |
| 1194 | |
| 1195 | void |
| 1196 | HttpTransactHeaders::normalize_accept_encoding(const OverridableHttpConfigParams *ohcp, HTTPHdr *header) |
| 1197 | { |
| 1198 | int normalize_ae = ohcp->normalize_ae; |
| 1199 | |
| 1200 | if (normalize_ae) { |
| 1201 | MIMEField *ae_field = header->field_find(MIME_FIELD_ACCEPT_ENCODING, MIME_LEN_ACCEPT_ENCODING); |
| 1202 | |
| 1203 | if (ae_field) { |
| 1204 | if (normalize_ae == 1) { |
| 1205 | // Force Accept-Encoding header to gzip or no header. |
| 1206 | if (HttpTransactCache::match_content_encoding(ae_field, "gzip")) { |
| 1207 | header->field_value_set(ae_field, "gzip", 4); |
| 1208 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] normalized Accept-Encoding to gzip"); |
| 1209 | } else { |
| 1210 | header->field_delete(ae_field); |
| 1211 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] removed non-gzip Accept-Encoding"); |
| 1212 | } |
| 1213 | } else if (normalize_ae == 2) { |
| 1214 | // Force Accept-Encoding header to br (Brotli) or no header. |
| 1215 | if (HttpTransactCache::match_content_encoding(ae_field, "br")) { |
| 1216 | header->field_value_set(ae_field, "br", 2); |
| 1217 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] normalized Accept-Encoding to br"); |
| 1218 | } else if (HttpTransactCache::match_content_encoding(ae_field, "gzip")) { |
| 1219 | header->field_value_set(ae_field, "gzip", 4); |
| 1220 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] normalized Accept-Encoding to gzip"); |
| 1221 | } else { |
| 1222 | header->field_delete(ae_field); |
| 1223 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] removed non-br Accept-Encoding"); |
| 1224 | } |
| 1225 | } else if (normalize_ae == 3) { |
| 1226 | // Force Accept-Encoding header to br,gzip, or br, or gzip, or no header. |
| 1227 | if (HttpTransactCache::match_content_encoding(ae_field, "br") && |
| 1228 | HttpTransactCache::match_content_encoding(ae_field, "gzip")) { |
| 1229 | header->field_value_set(ae_field, "br, gzip", 8); |
| 1230 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] normalized Accept-Encoding to br, gzip"); |
| 1231 | } else if (HttpTransactCache::match_content_encoding(ae_field, "br")) { |
| 1232 | header->field_value_set(ae_field, "br", 2); |
| 1233 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] normalized Accept-Encoding to br"); |
| 1234 | } else if (HttpTransactCache::match_content_encoding(ae_field, "gzip")) { |
| 1235 | header->field_value_set(ae_field, "gzip", 4); |
| 1236 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] normalized Accept-Encoding to gzip"); |
| 1237 | } else { |
| 1238 | header->field_delete(ae_field); |
| 1239 | Dbg(dbg_ctl_http_trans, "[Headers::normalize_accept_encoding] removed non-br non-gzip Accept-Encoding"); |
| 1240 | } |
| 1241 | } else { |
| 1242 | static bool logged = false; |
| 1243 | |
| 1244 | if (!logged) { |
| 1245 | Error("proxy.config.http.normalize_ae value out of range"); |
| 1246 | logged = true; |
| 1247 | } |
| 1248 | } |
| 1249 | } |
| 1250 | } |
| 1251 | } |
| 1252 |
nothing calls this directly
no test coverage detected