【发布时间】:2011-12-22 02:29:12
【问题描述】:
免责声明:
我正在一个项目中工作,其中存在一个“巨大”的 web 应用程序,它有一个用于移动设备的 api,因此更改 api 不是一种选择。
这个应用程序是很久以前开发的,已经有几个开发者在开发它,
话虽如此,问题是这样的;
在这个网站的移动API中(只是查看而不是返回json数据),代码正在寻找一个令牌,但在请求的标头中:
token = request.META.get('HTTP_TOKEN')
当我在本地测试这个 api 时,工作正常,但在生产中却不行,所以,我试图弄清楚发生了什么并发现了这个:
django 将标头,甚至自定义标头转换为 request.META 中的键,我使用 urllib2 和 requests 来测试 api,生产中的问题是在生产服务器中 request.META 从来没有一个名为 HTTP_TOKEN 的键,所以,做一点调试我认真地认为问题出在我们为 django 应用程序提供服务的方式上。
我们正在使用 django1.3、nginx、gunicorn、virtualenvwrapper、python2.7。
我的主要嫌疑人是 nginx,我认为,以某种方式 nginx 接收到标头但不将其转发给 django,我尝试对此进行一些研究,但我只从 nginx 中找到有关安全标头和自定义标头的信息,但是我没有找到有关如何告诉 nginx 允许该标头并且不删除它的文档或其他内容。
我这里需要帮助,首先是测试nginx是否接收到header,但是我对nginx了解一点,不知道如何告诉它记录请求的headers。
谢谢
更新
【问题讨论】:
-
你能证明这个假设吗?记录来自 nginx 和 django 的请求,并确保 HTTP 标头中确实存在差异。
-
部分是问题所在,在测试中,使用 urllib2 的脚本和请求我定义了我发送的标头,在我打印收到的标头的视图中,在开发服务器中,标头很好,但是在生产中 django 没有收到 HTTP_TOKEN 标头。
-
我正在寻找一种方法来对 nginx 打印请求标头说,但文档有点糟糕
-
请求头是字面意义上的HTTP_TOKEN吗?还是只是代币?
-
TOKEN 但 django 附加 HTTP_
标签: django configuration http-headers nginx gunicorn