Skip to content

[BUG] Can't add/override HTTP headers in other middlewares #101

Description

@alessiofachechi

Describe the bug
Putting the middleware on top of middleware list — as suggested by doc — doesn't allow next middlewares to potentially add/override HTTP headers through:

request.META['HTTP_CUSTOM_HEADER'] = "CUSTOM VALUE"

This is due to using django_guid.utils.get_id_from_header() in django_guid.middleware.process_incoming_request(), which triggers an earlier immutable HttpHeader object build, so any add/override headers intent has no impact.
Would be better to use request.META to get/set headers.

To Reproduce

  1. Create a middleware

    def foo_middleware(get_response):
        def middleware(request):
            request.META["HTTP_X_FOO"] = "foo"
            return get_response(request)
    
        return middleware
  2. Add middleware after django_guid

    MIDDLEWARE = [
        "django_guid.middleware.guid_middleware",
        "foo.foo_middleware",
    ]
  3. Try to access the header in a view

    @api_view(["GET"])
    def test_view(request):
        assert request.headers.get("X-Foo") == "foo"
  4. Now retry by removing "django_guid.middleware.guid_middleware" from MIDDLEWARE.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions