From 4011f60ff9620006993493ce233e4220dde73260 Mon Sep 17 00:00:00 2001 From: Salandora Date: Fri, 28 Aug 2015 06:31:25 +0200 Subject: [PATCH] Edge Fix Thanks @foosel for the Informations Conflicts: src/octoprint/server/views.py --- src/octoprint/server/api/__init__.py | 4 +++- src/octoprint/server/apps/__init__.py | 5 +++++ src/octoprint/server/util/__init__.py | 12 ++++++++++++ src/octoprint/server/util/flask.py | 8 ++++++++ src/octoprint/server/views.py | 4 +--- 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/octoprint/server/api/__init__.py b/src/octoprint/server/api/__init__.py index 735155da..961441fa 100644 --- a/src/octoprint/server/api/__init__.py +++ b/src/octoprint/server/api/__init__.py @@ -19,7 +19,7 @@ import octoprint.server import octoprint.plugin from octoprint.server import admin_permission, NO_CONTENT from octoprint.settings import settings as s, valid_boolean_trues -from octoprint.server.util import apiKeyRequestHandler, corsResponseHandler +from octoprint.server.util import noCachingResponseHandler, apiKeyRequestHandler, corsResponseHandler from octoprint.server.util.flask import restricted_access, get_json_command_from_request, passive_login @@ -42,6 +42,8 @@ from . import languages as api_languages VERSION = "0.1" +api.after_request(noCachingResponseHandler) + api.before_request(apiKeyRequestHandler) api.after_request(corsResponseHandler) diff --git a/src/octoprint/server/apps/__init__.py b/src/octoprint/server/apps/__init__.py index e1c7f509..b133f7da 100644 --- a/src/octoprint/server/apps/__init__.py +++ b/src/octoprint/server/apps/__init__.py @@ -10,10 +10,15 @@ from flask import Blueprint, request, make_response, jsonify import octoprint.server import octoprint.plugin + +from octoprint.server.util import noCachingResponseHandler, corsResponseHandler from octoprint.settings import settings as s apps = Blueprint("apps", __name__) +apps.after_request(noCachingResponseHandler) +apps.after_request(corsResponseHandler) + @apps.route("/auth", methods=["GET"]) def getSessionKey(): unverified_key, valid_until = octoprint.server.appSessionManager.create() diff --git a/src/octoprint/server/util/__init__.py b/src/octoprint/server/util/__init__.py index 426acc7a..d128e8ef 100644 --- a/src/octoprint/server/util/__init__.py +++ b/src/octoprint/server/util/__init__.py @@ -80,6 +80,18 @@ def corsResponseHandler(resp): return resp +def noCachingResponseHandler(resp): + """ + ``after_request`` handler for blueprints which shall set no caching headers + on their responses. + + Sets ``Cache-Control``, ``Pragma`` and ``Expires`` headers accordingly + to prevent all client side caching from taking place. + """ + + return flask.add_non_caching_response_headers(resp) + + def optionsAllowOrigin(request): """ Shortcut for request handling for CORS OPTIONS requests to set CORS headers. diff --git a/src/octoprint/server/util/flask.py b/src/octoprint/server/util/flask.py index 70609546..30136222 100644 --- a/src/octoprint/server/util/flask.py +++ b/src/octoprint/server/util/flask.py @@ -322,6 +322,14 @@ def cache_check_response_headers(response): return False + +def add_non_caching_response_headers(response): + response.headers["Cache-Control"] = "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" + response.headers["Pragma"] = "no-cache" + response.headers["Expires"] = "-1" + return response + + #~~ access validators for use with tornado diff --git a/src/octoprint/server/views.py b/src/octoprint/server/views.py index 0b59c673..905e1436 100644 --- a/src/octoprint/server/views.py +++ b/src/octoprint/server/views.py @@ -300,9 +300,7 @@ def index(): response.headers["Last-Modified"] = datetime.datetime.now() if first_run: - response.headers["Cache-Control"] = "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0" - response.headers["Pragma"] = "no-cache" - response.headers["Expires"] = "-1" + response = util.flask.add_non_caching_response_headers(response) return response