From ccaf6b0b2d9a7dc612b5129e1c2841a04a2b587c Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Sat, 21 May 2022 12:54:56 -0500 Subject: Normalize ordering and whitespace for multi-value request headers --- requests_cache/cache_keys.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'requests_cache') diff --git a/requests_cache/cache_keys.py b/requests_cache/cache_keys.py index 6038716..1652bd7 100644 --- a/requests_cache/cache_keys.py +++ b/requests_cache/cache_keys.py @@ -9,7 +9,17 @@ from __future__ import annotations import json from hashlib import blake2b from logging import getLogger -from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Mapping, Optional, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Union, +) from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse from requests import Request, Session @@ -107,11 +117,15 @@ def normalize_request( def normalize_headers( - headers: Mapping[str, str], ignored_parameters: ParamList + headers: MutableMapping[str, str], ignored_parameters: ParamList ) -> CaseInsensitiveDict: - """Sort and filter request headers""" + """Sort and filter request headers, and normalize minor variations in multi-value headers""" if ignored_parameters: headers = filter_sort_dict(headers, ignored_parameters) + for k, v in headers.items(): + if ',' in v: + values = [v.strip() for v in v.lower().split(',') if v.strip()] + headers[k] = ', '.join(sorted(values)) return CaseInsensitiveDict(headers) -- cgit v1.2.1