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

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

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

  1. код 400, сообщение плохой синтаксис запроса ('x16x03x01x00x95x01x00x00x91x03x01Nxaax9cx08x96x7fx92xe9Zx925xcaY4xa6xa5xabxf2x16xfaTx89xe7x8axc3x99J)6xfbxc44x00x00Hxc0')
  2. "??N????Z?5?Y4?????T??ÙJ)6??4H?" 400 -

Я перевел hex в первом (пробелы добавлены для удобочитаемости):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')

3 ответов


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


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

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

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

manage.py runserver ...

вместо:

manage.py runfcgi ...

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

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