diff options
Diffstat (limited to 'requests_cache')
-rw-r--r-- | requests_cache/cache_keys.py | 20 |
1 files changed, 17 insertions, 3 deletions
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) |