Почему мой HTTP-запрос не возвращается? Он просто висит навсегда, пока я не остановлю свой веб-сервер. Мой стек вызовов - это apache2 + пассажирский фьюжн + Flask.
Некоторый контекст: я собираюсь использовать модуль apache2 mod_auth_form со встроенным сохранением тела для аутентификации пользователя, используя сценарий WSGI и настройкисоответствующие сессионные куки с Apache с mod_auth_session . Это довольно стандартный материал для обычных HTML-страниц. Я хотел добавить некоторые украшения на страницу входа в систему с помощью веб-сервера. И по большей части это работает - за исключением случаев, когда пользователь вводит неверные учетные данные.
Вот соответствующая конфигурация сайтов apache2:
Session on
SessionCryptoPassphrase it_is_a_secure_passphrase
SessionCookieName session path=/;httponly;secure;
PassengerPython /usr/bin/python3
PassengerBaseURI /
PassengerErrorOverride on
PassengerAppGroupName flask
PassengerAppRoot /home/devuser/Desktop/FlaskProject
PassengerStartupFile webapp.wsgi
PassengerAppType wsgi
PassengerEnabled on
PassengerLogLevel 4
<Location "/static">
PassengerEnabled off
</Location>
<Location "/secure">
Require valid-user
AuthName "top secret"
AuthFormProvider wsgi
AuthType form
WSGIAuthUserScript /home/devuser/Desktop/FlaskProject/webapp/secure/authenticator.py
ErrorDocument 401 "/index"
AuthFormMethod form_method
AuthFormBody form_body
AuthFormMimetype form_mimetype
AuthFormUsername form_username
AuthFormPassword form_passwd
</Location>
<Location "/tester">
PassengerEnabled off
Require valid-user
AuthName "top secret"
AuthFormProvider wsgi
WSGIAuthUserScript /home/devuser/Desktop/FlaskProject/webapp/secure/authenticator.py
AuthType form
ErrorDocument 401 "/login.html"
AuthFormMethod form_method
AuthFormBody form_body
AuthFormMimetype form_mimetype
AuthFormUsername form_username
AuthFormPassword form_passwd
</Location>
<Location "/login.html">
PassengerEnabled off
</Location>
Намерение здесь, если пользователь посещает / безопасный/ some_secure_url / sample_file, когда еще не аутентифицировано, страница встроенного входа в систему (в данном случае маршрут для "/ index") будет обслуживаться из веб-приложения, и в случае успеха запрос будет перенаправлен на исходный URLотсюда и термин «встроенный вход в систему».
Это прекрасно работает, когда учетные данные верны, но зависает, когда учетные данные неверны и документ об ошибке 401 обслуживается пассажиром phusion,Если я заменю веб-сервер phusion обычным вызовом WSGI cgi / script , все будет работать отлично. Если я использую apache, но не использую вход в систему в виде встроенной формы, он работает нормально. И если я использую тот же HTML-файл без веб-сервера, такого как Phusion / flask, он работает нормально. Проблема возникает только в том случае, если я ввожу неверные учетные данные и только в том случае, если она обслуживается phusion / flaskТак что это не проблема со скриптом аутентификации, который очень прост.
Так почему же apache / phusion / flask никогда не отправляет ответ? Я проверил журналы ошибок, и я точно знаю, что скрипт аутентификации вызывается с переданными данными. Это похоже на то, как если бы браузер открыл соединение, а сокет остается открытым после того, как mod_auth_form вызывает скрипт аутентификации WSGI. Даже если я попытаюсь эмулировать почтовый запрос с помощью JQuery $ .post ('/ secure / blah', {...}) с соответствующими данными, он тоже не вернется ... если учетные данные не верны, в которыхесли он ведет себя так, как я ожидал.