【问题标题】:Unable to add custom header to response无法将自定义标头添加到响应
【发布时间】:2018-02-26 03:22:12
【问题描述】:

我无法将自定义标头添加到从 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 开发网络服务器。

如果我发送非 Ajax GET 请求,我在 Django 中添加的任何自定义标头都会在 Chrome 的响应中可见。所以这个问题似乎仅限于 Ajax 请求。

我正在使用 Django 1.11.4 和 Python2。

[编辑]

如果我在 WireShark 中捕获响应,我发现它没有 My-Custom-Header。此外,如果我在上述中间件的响应字典中添加自定义标头,则标头会显示在 Wireshark 中并且在 Chrome 中可见。所以这似乎是 Django 响应 Ajax 请求的问题。

【问题讨论】:

    标签: ajax django


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-04
      • 2019-06-10
      • 2017-07-04
      • 1970-01-01
      • 2021-12-28
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多