无法将自定义标头添加到响应中

时间:2017-09-17 13:59:52

标签: ajax django

我无法将自定义标头添加到从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问题。

1 个答案:

答案 0 :(得分:0)

此问题与Ajax无关。我使用this template tag来调用我的观点。由于该代码中的第32行,自定义响应标头将丢失。