Django: 400 syntaxe de requête incorrecte – que signifie ce message?

J’utilise django pour créer un site web simple. Lorsque vous tapez l’adresse de base (qui pour le moment est 127.0.0.1:8000/ ), j’utilise django pour afficher une vue qui effectue des vérifications et vous redirige en fonction de vos privilèges d’utilisateur. (Si vous avez des privilèges d’administrateur, vous accédez à /admin , si vous ne vous rendez pas dans /home et si vous n’êtes pas connecté, accédez à /login .)

Lorsque je fais cette requête HTTP, je suis redirigé comme je le devrais mais je vois également les deux erreurs suivantes dans mon journal de django:

  1. code 400, message Syntaxe de la requête ('\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 -

J’ai traduit l’hex dans le premier à être (espaces ajoutés pour la lisibilité): 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 & 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 &

Je peux certainement voir pourquoi le serveur n’aimerait pas cela comme une demande, mais je n’ai aucune idée d’où cela vient.

Des idées?

Merci beaucoup.

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

Voici le code de la vue:

 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') 

Pour répondre à votre question, cela se produit si vous essayez d’accéder au serveur django via https. Revenez en http et cette erreur disparaîtra.

Vous pouvez refactoriser ce middleware de maintenance pour obtenir le résultat, car il vérifie le statut de l’utilisateur AVANT de traiter les demandes de contenu, ce qui semble plus djangonostique ..

 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 

J’obtiens ce genre d’erreur quand je cours:

 manage.py runserver ... 

au lieu de:

 manage.py runfcgi ... 

parce que je suis derrière Nginx.

Lorsque vous utilisez runserver, il écoute les requêtes Web http standard. Lorsque vous utilisez runfcgi, il écoute un autre type de requête, en utilisant le protocole fastcgi au lieu de http.