PHP: данные POST теряются из-за сервера аутентификации - PullRequest
3 голосов
/ 08 марта 2012

У меня есть веб-сайт, где клиенты могут отправлять формы.Я использую PHP на стороне сервера и использую метод POST (большие формы).Проблема в том, что когда-нибудь запрос приходит на мой веб-сервер в виде запроса GET без информации о публикации.Эта проблема возникает только в том случае, если форма отправляется из определенного местоположения клиента, и проблема носит прерывистый характер (работает большую часть времени).

С помощью Fiddler, я думаю, я определил, что происходит, но не могу придуматьОбходной путь.Публикация в stackoverflow, чтобы увидеть, есть ли у кого-то идея.

По сути, последовательность выглядит следующим образом:

1- Запрос POST отправляется со всеми соответствующими данными.

2-Похоже, что POST-запрос был перехвачен прокси-сервером аутентификации.

3- Прокси-сервер отправляет ответ HTTP 302. на запрос POST и перенаправляет на другой внутренний адрес для аутентификации.

4- Происходят транзакции аутентификации (два запроса GET, с ответом 401)

5 - Прокси-сервер отвечает перенаправлением 302 на последний запрос аутентификации, который перенаправляет на исходный запрос.

6- Но браузер отправляет исходный запрос в виде запроса GET без НИКАКОЙ информации о публикации вместо запроса POST, как он был отправлен изначально.

Конечный результат - пустая страница для пользователяи данные формы теряются.

Может ли это быть из-за того, что, хотя исходный запрос является POST, он включает в себя несколько параметров в URL (возможно, браузер предполагает, что это GET из-за них?)?

Это нормальное поведение?Я читал, что это в соответствии со стандартом (браузеры всегда отвечают на 302 с GET), но я не могу поверить, что это так, так как в этих ситуациях нет решения для запроса POST?

Должно быть несколько способов обойти эту проблему, которая приводит к очень плохому пользовательскому опыту.Дайте мне знать, что вы думаете.

1 Ответ

0 голосов
/ 09 марта 2012

Я также сталкивался с чем-то подобным, когда использовал специальный ErrorDocument специально для меня на странице 404. Видимо с 404 страницами, и я предполагаю, что 401? Никакие почтовые данные не отправляются им. То, что я в итоге сделал вместо этого, сделано так, что он переходит на страницу 404 таким же образом, но я использую правило перезаписи вместо errordocument.

Вот правила перезаписи для того же действия errorDocument 404

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.php !-f
RewriteRule ^(.*?)$ /error404.php [L]

Можно подумать, что если вы не можете обойтись, зная, будет ли это публикация или получить, вы можете вместо этого использовать $ _REQUEST, и он сможет обработать запрос независимо от способа его поступления. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...