我无法将自定义标头添加到从render()返回的响应中:
response = render(request, 'my_template.html', {'ctx1': 1, 'ctx2': 2})
response['My-Custom-Header'] = 'abc12345'
return response
这是对使用jQuery' $.get()
启动的Ajax请求的响应。在Chrome上,响应已正确呈现模板,但它没有自定义标头。如果我在返回之前打印response
对象,我会看到它有我的自定义标题。
我认为这个问题是因为this answer,所以我添加了Django中间件来为所有响应添加标题:
class CustomHeaderMiddleware():
def process_response(self, request, response):
response['Access-Control-Expose-Headers'] = 'My-Custom-Header'
return response
我的所有回复现在都有标题Access-Control-Expose-Headers: My-Custom-Header
,但我仍然看到这个问题。
我的要求是当地的;我正在使用Django开发Web服务器。
如果我发送非Ajax GET请求,我在Django中添加的任何自定义标头都会显示在Chrome上的响应中。所以这个问题似乎仅限于Ajax请求。
我正在使用Django 1.11.4和Python2。
[编辑]
如果我在WireShark中捕获响应,我发现它没有My-Custom-Header
。此外,如果我将自定义标头添加到上述中间件中的响应字典中,则标题会显示在Wireshark中并在Chrome中可见。所以这似乎是一个回应Ajax请求的Django问题。