За последние 24 часа нас посетили 21620 программистов и 1028 роботов. Сейчас ищут 762 программиста ...

Внезапный 302 редирект после отправки формы POST запросом

Тема в разделе "PHP для профи", создана пользователем Alexus, 28 июл 2020.

  1. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Здравствуйте форумчане! Во-первых хочу поблагодарить Вас за Вашу деятельность тут на форуме. Надеюсь, что она приносит достойные плоды. Теперь ближе к теме..

    Разрабатываю сайт, структура построена на нативном PHP без фреймворков. есть простая страница, где пользователь отправляет некоторые данные и они приходят в файл, где в зависимости от переданной переменной, инклудится та или иная часть страницы.

    Все просто до невозможного и работало нормально, НО вдруг по каким-то обстоятельствам после изменения кода и добавления в форму новых переменных, в файл они перестали поступать. При этом в браузере POST запрос поступает на этот файл с теми данными, которые отправлялись ранее , а потом редиректит НА ЭТОТ ЖЕ ФАЙЛ GET запросом, но уже без добавленных переменных.

    ИСКАТЬ эту проблему я начал естественно сначала в apache, но там кроме редиректа с http на https ничего не увидел, затем я перешел к коду, но и там ничего сверхъестественного не увидел (Данные уходят, но после редиректа часть данных исчезает)

    Потом я начал грешить на cloudflare, но и его отключение к моему великому сожалению не принесло должного результата.

    В общем я сдался и пришел к вам. HELP, SOS, НА ПОМОЩЬ!:)

    P.S. Если требуется код я пришлю, но там ничего необычного, простая html форма c POST методом и action на файл, где обрабатывается скрипт. Никаких AJAX-ов нет.

    HTML:
    1.  
    2. <form method="POST" action="some_file.php" >
    3. <input name="name" value="value" />
    4. <button type="submit"></button>
    5. </form>
    6.  
    PHP:
    1. // some_file.php
    2. echo $_POST['name'];
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Домовенок решил исправить ваши ошибки :)

    Я про редирект в ответ на POST-запрос.
    --- Добавлено ---
    При GET-запросе отсекаются POST-параметры, что вполне естественно. Наверное, все-таки в конфиге сервера косяк, хотя при редиректе http->https по идее 301-ый редирект должен быть, но вы и тут могли накосячить.
     
  3. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    У меня только 1 файл htaccess в корневой дирректории, пробовал удалять все его настройки, не помогло. Да и вообще не могу понять при чем тут GET у меня данные с формы уходят POST запросом. GET запрос осуществляется после 302 редиректа. При этом часть данных успешно доходят. Отсекаются только новые введенные мной в форму данные.

    Можно вообще этот редирект отключить?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ты уверен про тот же самый URL? Потому что...
    адреса http и https это таки разные адреса. http→https мог бы объяснить всё. Тем более когда ты за CDN, тот в некоторых конфигурациях может сам обеспечивать SSL и слать на сайт уже незащищенный запрос. А там опаньки! есть реакция на http-без-s.

    Была похожая проблема, оказалось что браузер просто запомнил 301 редирект (постоянный) который однажды произошел из-за неправильной конфигурации на сайте, а потом никак не хотел его забыть. Сервер уже вообще был не при чём, сам браузер делал редирект.

    Короче, 301 надо использовать только когда сайт переезжает на другие адреса НАВСЕГДА. Чисто технические вещи должны использовать статус 302.
     
  5. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Спасибо, проверю еще раз может действительно упустил где-то потом отпишу
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Это обычно происходит, когда делается перенаправление с http на https, или что-то в этом роде. Пост запрос поступает на адрес, подлежащий перенаправлению. Смотри настройки сервера. Если апач, проверь .htaccess
     
  7. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Хотелось бы верить, в .htaccess при редиректе http -> https используется 301 редирект не 302. Чтобы убедиться, что проблема именно в этом редиректе я повторно удалил все настройки из .htaccess и отключил cloudflare, но опять получил тот же результат. То есть 302 редирект срабатывает ДАЖЕ с протоколом http

    Да я перепроверил и убедился, что перенаправляет именно на этот же файл, вплоть до полного совпадения пути и всех буковок :( Редирект срабатывает даже когда POST запрос приходит на http, происходит тот же редирект http(POST)->http ->(302 GET)-> http.

    К сожалению не мой случай, редирект срабатывает и на других устройствах.

    Последнее на что я подумал это на хостинг. У меня GoDaddy чуть погуглил и почитал что уже были похожие ситуцаии, но на сутки, а не как у меня уже неделю или более. В общем для тех, кто сталкивался с такими ошибками у данного хостера дайте знать PLEASE и по возможности как решить проблему..
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    На локалке есть проблема? Трассировать XDebug-ом пробовал?
     
  9. Alexus

    Alexus Активный пользователь

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    На локалке все норм. Xdebug не пробовал