Я создаю сайт Django и пытаюсь использовать функцию request.is_ajax() ... Но работает только локально и это сводит меня с ума!
Я нахожусь в том месте, где я только что сбросил заголовки. Здесь (на тестовом сервере django) есть HTTP_X_REQUESTED_WITH, но на рабочем сервере (cherokee + scgi) я получаю только X-Requested-With.
Я использовал firebug для отслеживания заголовков послал и его X-Requested-With (в обеих версиях сайта). Я очень, очень запутался. Может ли кто-нибудь объяснить, что происходит, и как я могу обойти это, не теряя рассудка?





В настоящее время я работаю над проблемой с крошечной частью 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 и почему это не так.
Обновлено: причина, по-видимому, находится глубоко внутри фактического веб-сервера.
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_ *?
wrt / the X-Requested-With => HTTP_X_REQUESTED_WITH, это соответствует спецификациям CGI. Поскольку FastCGI, SCGI и WSGI все основаны на спецификациях CGI, разработчики Django решили придерживаться этого соглашения (FWIW, класс ModPythonRequest выполняет ту же перезапись для согласованности).
Похоже, ваша проблема в том, что что-то в цепочке cherokee / scgi неправильно переписывает заголовки. Какую реализацию scgi вы используете?
Да, я думаю, что веб-сервер должен переводить заголовки HTTP в среду SCGI. Не знаю, как это должно происходить в SCGI (я использую WSGI), но это может быть ошибкой в Cherokee.