【发布时间】: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 请求的问题。
【问题讨论】: