我正在构建一个Django网站并尝试使用request.is_ajax()
功能......但是它只在本地工作 而且它让我发疯了!< / p>
我正处于倾倒标题的位置。这里(在django测试服务器上)有HTTP_X_REQUESTED_WITH
,但在生产服务器(cherokee + scgi)上,我得到的是X-Requested-With
。
我使用了firebug来窥探发送的标头,它是X-Requested-With
(在网站的两个版本上)。我非常非常非常困惑。任何人都可以解释发生了什么以及我如何解决它而不会失去理智?
答案 0 :(得分:3)
wrt / X-Requested-With =&gt; HTTP_X_REQUESTED_WITH东西,它符合CGI规范。由于FastCGI,SCGI和WSGI都基于CGI规范,Django开发人员选择坚持这种约定(FWIW,ModPythonRequest类为了一致性做同样的重写)。
所以看来你的问题是切诺基/ scgi链中的某些东西没有正确地重写标题。您使用哪种scgi实现?
答案 1 :(得分:2)
我目前正在使用一小部分MiddleWare来解决这个问题,它基本上会查找“错误的”标头,如果它存在,则附加一个相同值的新标头:
if 'X-Requested-With' in request.META:
request.META['HTTP_X_REQUESTED_WITH'] = request.META['X-Requested-With']
但我真的希望我知道这些标题应该发生什么,因为始终会发送X-Requested-With
...我不明白为什么要将其翻译成HTTP_X_REQUESTED_WITH
以及为什么不是
编辑:原因似乎在实际的Web服务器中。
case 'X':
if (header_equals ("X-Forwarded-For", header_x_forwarded_for, begin, header_len)) {
ret = add_known_header (hdr, header_x_forwarded_for, val_offs, val_len);
} else if (header_equals ("X-Forwarded-Host", header_x_forwarded_host, begin, header_len)) {
ret = add_known_header (hdr, header_x_forwarded_host, val_offs, val_len);
} else
goto unknown;
break;
我已经提交了一个错误来添加我的标题,但是所有X- *标题都应该转换为HTTP_X_ *标题吗?