#!/usr/bin/env python3 import os import sys from urllib.parse import parse_qs def send304(): sys.stdout.write( 'Content-Type: text/html\r\n' 'status: 304\r\n' 'ETag: foo\r\n\r\n' ) ident = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True).get('id', [''])[0] cookies = {} if 'HTTP_COOKIE' in os.environ: header_cookies = os.environ['HTTP_COOKIE'] header_cookies = header_cookies.split('; ') for cookie in header_cookies: cookie = cookie.split('=') cookies[cookie[0]] = cookie[1] count = 1 if cookies.get(ident, None): count = int(cookies.get(ident, 0)) sys.stdout.write(f'Set-Cookie: {ident}={count + 1}\r\n') if count == 1: sys.stdout.write( 'Cache-Control: must-revalidate\r\n' 'ETag: foo\r\n' 'Content-Type: application/json\r\n\r\n' '{"version": 1}' ) elif count == 3: sys.stdout.write( 'status: 404\r\n' 'Cache-Control: must-revalidate\r\n' 'Content-Type: application/json\r\n\r\n' '{"not": "found"}' ) elif count == 4: if os.environ.get('HTTP_IF_NONE_MATCH', '') == 'foo': send304() else: sys.stdout.write( 'Cache-Control: must-revalidate\r\n' 'ETag: foo\r\n' 'Content-Type: application/json\r\n\r\n' '{"version": 2}' ) else: send304()