From 1bdb54df35847187efef291eac4f66f298f7ed61 Mon Sep 17 00:00:00 2001 From: Ildar Iskhakov Date: Mon, 5 Jun 2023 11:49:39 +0800 Subject: [PATCH] Remove request reading middleware as we use post-buffering (#2094) # What this PR does RequestBodyReadingMiddleware is excess as [post-buffering is enabled](https://github.com/grafana/oncall/blob/dev/engine/uwsgi.ini#L17): If an HTTP request has a body (like a POST request generated by a form), you have to read (consume) it in your application. If you do not do this, the communication socket with your webserver may be clobbered. If you are lazy you can use the post-buffering option that will automatically read data for you. For Rack applications this is automatically enabled. (https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html) ## Which issue(s) this PR fixes ## Checklist - [ ] Unit, integration, and e2e (if applicable) tests updated - [ ] Documentation added (or `pr:no public docs` PR label added if not required) - [ ] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not required) --- engine/engine/middlewares.py | 16 +--------------- engine/settings/base.py | 1 - 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/engine/engine/middlewares.py b/engine/engine/middlewares.py index 83ca2bf6..5af7fc31 100644 --- a/engine/engine/middlewares.py +++ b/engine/engine/middlewares.py @@ -3,9 +3,8 @@ import logging from django.apps import apps from django.conf import settings -from django.core.exceptions import PermissionDenied, RequestDataTooBig +from django.core.exceptions import PermissionDenied from django.db import OperationalError -from django.http import HttpResponse from django.utils.deprecation import MiddlewareMixin logger = logging.getLogger(__name__) @@ -57,19 +56,6 @@ class RequestTimeLoggingMiddleware(MiddlewareMixin): return response -class RequestBodyReadingMiddleware(MiddlewareMixin): - def process_request(self, request): - # Reading request body, as required by uwsgi - # https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html - # "If an HTTP request has a body (like a POST request generated by a form), - # you have to read (consume) it in your application. - # If you do not do this, the communication socket with your webserver may be clobbered." - try: - request.body - except RequestDataTooBig: - return HttpResponse(status=400) - - class BanAlertConsumptionBasedOnSettingsMiddleware(MiddlewareMixin): """ Banning requests for /integrations/v1 diff --git a/engine/settings/base.py b/engine/settings/base.py index ce6ec554..25056d8d 100644 --- a/engine/settings/base.py +++ b/engine/settings/base.py @@ -245,7 +245,6 @@ MIDDLEWARE = [ "log_request_id.middleware.RequestIDMiddleware", "engine.middlewares.RequestTimeLoggingMiddleware", "engine.middlewares.BanAlertConsumptionBasedOnSettingsMiddleware", - "engine.middlewares.RequestBodyReadingMiddleware", "django.middleware.security.SecurityMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware",