Веб-приложение Python Django возвращает ошибку 404 для GET-запроса
Я создал базовое веб-приложение, используя Python Django. В настоящее время реализован только один API, т.е. User/GetUserName.aspx
, который возвращает простое сообщение "Hello". Веб-сервис работает на встроенном в Django dev-сервере. API успешно вызывается из браузера по URL 127.0.0.1:8001/User/GetUserName.aspx или 192.168.10.120:8001/User/GetUserName.aspx, а также из PostMan.
Теперь в той же сети есть одно устаревшее устройство, которое обращается к этому API. Я сконфигурировал его с IP-адресом моей машины и портом веб-службы. Когда это устройство обращается к API, оно получает 404 ошибку.
Я провел анализ проблемы и сделал следующие замечания:
- Когда я обращаюсь к API из браузера или PostMan, то Django выводит API на консоль в виде GET User/GetUserName.aspx 200.
- Когда устройство обращается к API, Django выводит API на консоль в виде GET https://192.168.10.120:8001/User/GetUserName.aspx.
- Я также реализовал тот же API в Python Flask, где он работает без проблем.
- Прочитав документы устройства, я обнаружил, что устройство всегда устанавливает https соединение с сервером. Однако для некоторых API он устанавливает флаг "verify=false", который отключает проверку сертификата. Для других API он выполняет проверку сертификата.
- Я пробовал настроить https сервер с самоподписанным сертификатом, но в этом случае мое веб-приложение даже не принимает запрос, и в консоли не отображается никаких логов.
Может ли кто-нибудь подсказать мне, что я упускаю или делаю неправильно?
Из деталей я могу сделать вывод, что проблема заключается в несоответствии http и https между Django и устаревшим устройством.
Попробуйте одно из этих двух решений:
Переведите все на https Для этого запустите django на https. Вы можете использовать django-sslserver чтобы запустить django по https. И сохраните на устройстве sslverify=false (так как оно использует самоподписывающийся сертификат)
.Переведите все на http: Убедитесь, что устаревшие устройства запрашивают через протокол http. И Django работает по http. проверьте, что заголовок HSTS должен быть отключен. HSTS