Django возвращает HTTP 301?

У меня есть представление django, которое возвращает HTTP 301 по запросу curl:

grapefruit:~ pete$ curl -I http://someurl
HTTP/1.1 301 MOVED PERMANENTLY
Date: Fri, 16 Oct 2009 19:01:08 GMT
Server: Apache/2.2.9 (Win32) mod_wsgi/2.5 Python/2.6.2 PHP/5.2.6
Location: http://someurl
Content-Type: text/html; charset=utf-8

Я не могу получить содержимое страницы из curl. Однако если я захожу на страницу в браузере, я вижу содержимое, как и ожидалось.

Любые идеи?

Спасибо, Пит


person slypete    schedule 16.10.2009    source источник


Ответы (4)


Вероятно, вы запрашиваете URL-адрес без косой черты и для APPEND_SLASH установлено значение True (по умолчанию) в settings.py, поэтому Django перенаправляет на URL-адрес, включая косую черту.

person Daniel Roseman    schedule 16.10.2009
comment
Самое смешное, что у Почтальона такой проблемы нет (301). Думаю, Почтальон добавляет косую черту. - person Simon Moshenko; 02.04.2018
comment
Что случилось со мной, так это то, что мне нужно было добавить заголовок Authorization в мои запросы. В сафари он будет 301 и отправлен обратно как неавторизованный, потому что он не перенесет заголовок, когда произойдет перенаправление. Я привык, что Chrome и Safari делают это автоматически. Добавление косой черты сработало для меня. - person Lewis Menelaws; 06.04.2020

Моя проблема была PREPEND_WWW, при использовании в localhost он возвращает ошибку 301, я только что создал файл локальных настроек и установил его PREPEND_WWW = False

person AbeEstrada    schedule 24.11.2010

В моем случае, добавление комментариев к SecurityMiddleware в settings.py файле помогло. Я должен сказать, что это происходит только при запуске команды runserver (иначе говоря, при тестировании). С Apache он не попадает в цикл перенаправления.

person Hassek    schedule 27.08.2015
comment
В моем случае это произошло при помощи Gunicorn. Сервер возвращает точно такое же местоположение, которое было передано, что превращается в бесконечный цикл. Я решил эту проблему, установив только SECURE_SSL_REDIRECT = False вместо полного удаления SecurityMiddleware. Но мне интересно, почему это происходит и как это исправить? - person jaw; 17.12.2020

Так что для меня это была комбинация следующего:

  • SecurityMiddleware включен
  • SECURE_SSL_REDIRECT = True
  • На отдельном веб-сервере также было включено перенаправление SSL.

В этом случае веб-сервер уже выполняет перенаправление и пересылает запрос через HTTP в Django, который затем снова перенаправляет на HTTPS, что завершается бесконечным циклом.

Так что в этом случае можно безопасно установить SECURE_SSL_REDIRECT = False.

person jaw    schedule 18.12.2020