Fa il httplib2 biblioteca URI cache di Python con le stringhe GET?
Domanda
Nel seguente esempio quello che viene memorizzato nella cache in modo corretto? Esiste un Vary-Header devo impostare sul lato server per la stringa GET?
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request("http://test.com/list/")
resp, content = h.request("http://test.com/list?limit=10")
resp, content = h.request("http://test.com/list?limit=50")
Soluzione
httplib2 utilizza l'URI completo per la chiave di cache, quindi in questo caso ogni URL che avete nel vostro esempio verrà memorizzata nella cache separatamente dal cliente.
Per il capitolo e versetto dal file __init__.py
per httplib2, se si desidera la prova, uno sguardo alla chiamata alla cache attorno alla riga 1000:
cachekey = defrag_uri
cached_value = self.cache.get(cachekey)
Il defrag_uri è definita dalla funzione urlnorm
(line 170ish) e comprende il regime, autorità, percorso e query.
Naturalmente, come sapete, il server può interpretare la definizione di "risorsa" in modo diverso e, quindi, può ancora tornare contenuto memorizzato nella cache. Dal momento che suona come si sta controllando il server in questo caso, si ha il pieno controllo lì, quindi nessun problema. In entrambi i casi, sul lato client, non ci sarebbe nessun valore client-cache utilizzate per la prima chiamata a ciascuno dei 3 URL nei tuoi esempi.