mirror of
https://github.com/servo/servo
synced 2026-04-29 02:47:55 +02:00
63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
def main(request, response):
|
|
token = request.GET.first("token", None)
|
|
if "querystate" in request.GET:
|
|
from json import JSONEncoder
|
|
response.headers.set("Content-Type", "text/plain")
|
|
return JSONEncoder().encode(request.server.stash.take(token))
|
|
content = request.GET.first("content", None)
|
|
tag = request.GET.first("tag", None)
|
|
date = request.GET.first("date", None)
|
|
expires = request.GET.first("expires", None)
|
|
vary = request.GET.first("vary", None)
|
|
cc = request.GET.first("cache_control", None)
|
|
redirect = request.GET.first("redirect", None)
|
|
inm = request.headers.get("If-None-Match", None)
|
|
ims = request.headers.get("If-Modified-Since", None)
|
|
pragma = request.headers.get("Pragma", None)
|
|
cache_control = request.headers.get("Cache-Control", None)
|
|
ignore = "ignore" in request.GET
|
|
|
|
server_state = request.server.stash.take(token)
|
|
if not server_state:
|
|
server_state = []
|
|
state = dict()
|
|
if not ignore:
|
|
if inm:
|
|
state["If-None-Match"] = inm
|
|
if ims:
|
|
state["If-Modified-Since"] = ims
|
|
if pragma:
|
|
state["Pragma"] = pragma
|
|
if cache_control:
|
|
state["Cache-Control"] = cache_control
|
|
server_state.append(state)
|
|
request.server.stash.put(token, server_state)
|
|
|
|
if tag:
|
|
response.headers.set("ETag", '"%s"' % tag)
|
|
elif date:
|
|
response.headers.set("Last-Modified", date)
|
|
if expires:
|
|
response.headers.set("Expires", expires)
|
|
if vary:
|
|
response.headers.set("Vary", vary)
|
|
if cc:
|
|
response.headers.set("Cache-Control", cc)
|
|
|
|
# The only-if-cached redirect tests wants CORS to be okay, the other tests
|
|
# are all same-origin anyways and don't care.
|
|
response.headers.set("Access-Control-Allow-Origin", "*");
|
|
|
|
if redirect:
|
|
response.headers.set("Location", redirect);
|
|
response.status = (302, "Redirect")
|
|
return ""
|
|
elif ((inm is not None and inm == tag) or
|
|
(ims is not None and ims == date)):
|
|
response.status = (304, "Not Modified")
|
|
return ""
|
|
else:
|
|
response.status = (200, "OK")
|
|
response.headers.set("Content-Type", "text/plain")
|
|
return content
|