Я использую python 3.6 с модулем requests
для использования API и CacheControl
модуль для кэширования ответа API. Я использую следующий код, но кэш не кажется, работает:Python: HTTP-кеширование с использованием 'CacheControl` не работает
import requests
from cachecontrol import CacheControl
sess = requests.session()
cached_sess = CacheControl(sess)
response = cached_sess.get('https://jsonplaceholder.typicode.com/users')
Каждый запрос на этот URL возвращает код статуса 200
(вместо 304
кода состояния) и тот же ресурс запрашивается каждый раз, даже несмотря на то, ETag
заголовки такие же, и max-age
был по-прежнему действителен. API возвращает следующие заголовки, связанные с кешем:
'Cache-Control': 'public, max-age=14400'
'Expires': 'Sat, 04 Feb 2017 22:23:28 GMT' (time of original request)
'Etag': 'W/"160d-MxiAGkI3ZBrjm0xiEDfwqw"'
В чем проблема?
UPDATE: Я не посылая If-None-Match
заголовок с любым API вызова, я вручную должны это сделать или CacheControl
модуль должен заботиться о нем автоматически?
Спасибо за ваш ответ. Я использую последнюю версию CacheControl 0.12.0. Вместо метода 'DictCache' по умолчанию я также попробовал метод FileCache, но это тоже не работает. Однако метод 'DictCache' работает, только если я отправляю' If-None-Match' вручную с запросом. Кроме того, ответ не имеет заголовка «Transfer-Encoding», но имеет «Content-Encoding: gzip», может это проблема? –