Merge pull request #94 from mattrobenolt/if-none-match

Handle If-None-Match
This commit is contained in:
Kenneth Reitz
2013-05-19 12:59:09 -07:00
3 changed files with 11 additions and 5 deletions
+1
View File
@@ -18,3 +18,4 @@ Patches and Suggestions
- Radomir Stevanovic (http://github.com/randomir)
- Steven Honson
- Cory Benfield (Lukasa) <cory@lukasa.co.uk>
- Matt Robenolt (https://github.com/mattrobenolt)
+1 -1
View File
@@ -30,7 +30,7 @@ Freely hosted in [HTTP](http://httpbin.org) &
- [`/html`](http://httpbin.org/html) Renders an HTML Page.
- [`/robots.txt`](http://httpbin.org/robots.txt) Returns some robots.txt rules.
- [`/deny`](http://httpbin.org/deny) Denied by robots.txt file.
- [`/cache`](http://httpbin.org/cache) Returns 200 unless an If-Modified-Since header is provided, when it returns a 304.
- [`/cache`](http://httpbin.org/cache) Returns 200 unless an If-Modified-Since or If-None-Match header is provided, when it returns a 304.
## DESCRIPTION
+9 -4
View File
@@ -11,10 +11,12 @@ import base64
import json
import os
import time
import uuid
from flask import Flask, Response, request, render_template, redirect, jsonify, make_response
from raven.contrib.flask import Sentry
from werkzeug.datastructures import WWWAuthenticate
from werkzeug.http import http_date
from . import filters
from .helpers import get_headers, status_code, get_dict, check_basic_auth, check_digest_auth, H, ROBOT_TXT, ANGRY_ASCII
@@ -332,11 +334,14 @@ def decode_base64(value):
@app.route('/cache', methods=('GET',))
def cache():
"""Returns a 304 if an If-Modified-Since header is present. Returns the same as a GET otherwise."""
if_modified = request.headers.get('If-Modified-Since')
"""Returns a 304 if an If-Modified-Since header or If-None-Match is present. Returns the same as a GET otherwise."""
is_conditional = request.headers.get('If-Modified-Since') or request.headers.get('If-None-Match')
if if_modified is None:
return view_get()
if is_conditional is None:
response = view_get()
response.headers['Last-Modified'] = http_date()
response.headers['ETag'] = uuid.uuid4().hex
return response
else:
return status_code(304)