From 9ebd5a29e4c7520428d7b7c1100b895f49f150a9 Mon Sep 17 00:00:00 2001 From: Robert Kirberich Date: Tue, 4 Apr 2017 13:57:19 +0100 Subject: [PATCH] Update existing vary headers in response instead of overwriting them. Previously, any existing vary headers would simply be wiped out by DRF. Using patch_vary_headers assures that existing headers remain. --- rest_framework/views.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rest_framework/views.py b/rest_framework/views.py index 92911e8df..bea4d1922 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -9,6 +9,7 @@ from django.db import models from django.http import Http404 from django.http.response import HttpResponseBase from django.utils import six +from django.utils.cache import cc_delim_re, patch_vary_headers from django.utils.encoding import smart_text from django.utils.translation import ugettext_lazy as _ from django.views.decorators.csrf import csrf_exempt @@ -414,6 +415,11 @@ class APIView(View): response.accepted_media_type = request.accepted_media_type response.renderer_context = self.get_renderer_context() + # Add new vary headers to the response instead of overwriting. + vary_headers = self.headers.pop('Vary', None) + if vary_headers is not None: + patch_vary_headers(response, cc_delim_re.split(vary_headers)) + for key, value in self.headers.items(): response[key] = value