Django: 400 неверный синтаксис запроса - что означает это сообщение?

Я использую django для создания простого веб-сайта. Когда вы вводите базовый адрес (на данный момент это 127.0.0.1:8000/), я использую django, чтобы показать представление, которое выполняет некоторые проверки и перенаправляет вас в зависимости от ваших пользовательских привилегий. (Если у вас есть права администратора, вы переходите к /admin, если нет - к /home, а если вы не вошли в систему, переходите к /login.)

Когда я делаю этот HTTP-запрос, меня перенаправляют как следует, но я также вижу следующие две ошибки в моем журнале django:

  1. код 400, сообщение Неверный синтаксис запроса ('\x16\x03\x01\x00\x95\x01\x00\x00\x91\x03\x01N\xaa\x9c\x08\x96\x7f\x92\xe9Z\x925\xcaY4\xa6\xa5\xab\xf2\x16\xfaT\x89\xe7\x8a\xc3\x99J)6\xfb\xc44\x00\x00H\xc0')
  2. "??N????Z?5?Y4?????T??ÙJ)6??4H?" 400 -

Я перевел шестнадцатеричный код в первый (пробелы добавлены для разборчивости): SYN ETX NUL NUL U SOH NUL NUL Q ETX NUL N 170 156 X r 246 STX 141 214 ? 143 EOT FS j 142 223 s 241 220 < 185 \ \ m 242 &

Я, конечно, понимаю, почему серверу не понравится этот запрос, но я понятия не имею, откуда он.

Любые идеи?

Спасибо большое.

==============

Вот код для представления:

def index(request):
    user = request.user
    admin_courses = []

    if (user.is_authenticated()):
        u_id = user.getUserId()
        my_enrollment = Enrollment.objects.filter(user_id=u_id)
        admin_enrollment = my_enrollment.filter(type="ADMIN")
        for enr in admin_enrollment:
            course = Course.objects.get(id=enr.getCourseId())
            admin_courses.append(course)
        if (len(admin_courses)>0):
            return HttpResponseRedirect('/admin')
        else:
            return HttpResponseRedirect('/home')
    return HttpResponseRedirect('/login')

person Miriam    schedule 28.10.2011    source источник
comment
Может быть, вам стоит показать код для представления.   -  person Daniel Roseman    schedule 28.10.2011
comment
вы пробовали добавлять косую черту к своим перенаправлениям?   -  person Hedde van der Heide    schedule 28.10.2011
comment
Да ничего не меняет. Но идея хорошая.   -  person Miriam    schedule 28.10.2011
comment
Плохой запрос также может возникнуть, когда мы отправляем пустые данные. У меня возникла эта ошибка, когда я неосознанно отправлял пустой массив в запросах, хотя он должен был быть непустым. Потребовалось время, чтобы понять это   -  person jibin mathew    schedule 19.04.2019


Ответы (3)


Чтобы ответить на ваш фактический вопрос, это происходит, если вы пытаетесь получить доступ к серверу django через https. Вернитесь к http, и эта ошибка исчезнет.

person David Horn    schedule 30.12.2011

Я получаю такую ​​ошибку при запуске:

manage.py runserver ...

вместо того:

manage.py runfcgi ...

потому что я за Nginx.

Когда вы используете runserver, он прослушивает стандартные веб-запросы http. Когда вы используете runfcgi, он прослушивает другой тип запроса, используя протокол fastcgi вместо простого http.

person Mnebuerquo    schedule 19.06.2014

Вы можете провести рефакторинг этого промежуточного программного обеспечения обслуживания для достижения результата, потому что оно проверяет статус пользователя ПЕРЕД обработкой запросов на контент, что кажется более опасным.

import settings
from django.http import HttpResponseRedirect


class MaintenanceModeMiddleware(object):
    """
    Maintenance mode for django

    If an anonymous user requests a page, he/she is redirected to the
    maintenance page.
    """
    def process_request(self, request):

        is_login = request.path in (
            settings.LOGIN_REDIRECT_URL,
            settings.LOGIN_URL,
            settings.LOGOUT_URL,
            settings.MAINTENANCE_PATH,
        )
        if (not is_login) and settings.MAINTENANCE and (not request.user.is_authenticated()):
            return HttpResponseRedirect(settings.MAINTENANCE_PATH)
        return None
person Hedde van der Heide    schedule 28.10.2011
comment
Вы совершенно правы; это лучшая стратегия django. Спасибо! - person Miriam; 28.10.2011