Ответ 1
Не совсем понятно, что вы имеете в виду, поэтому давайте рассмотрим несколько сценариев:
-
Пользователь должен создать форму POST на сервере, отличном от вашего собственного
Легко, просто укажите цель как действие формы:
<form action="http://someotherserver.com" method="post">
-
Пользователь должен быть перенаправлен после успешной отправки POST
Легко, принимайте и обрабатывайте данные POST как обычно, а затем отвечайте заголовком
302
или303
перенаправления. -
Пользователь должен отправлять POST-данные на ваш сервер и после проверки вы хотите отправить данные на другой сервер
Немного сложно, но три варианта:
- Сервер принимает данные POST, и пока пользователь ждет ответа, вы устанавливаете соединение с другим сервером, отправляете данные, получаете ответ и затем возвращаете ответ пользователю.
- Вы отвечаете с перенаправлением
307
, что означает, что пользователь должен попробовать тот же запрос на другом адресе. Теоретически это означает, что браузер должен отправлять одни и те же данные другому серверу. Я не совсем уверен, насколько хорошо это поддерживается, но любой браузер, понимающий HTTP1.1, должен это сделать. AFAIA он не использовал это часто на практике.
PS: В спецификации указано, что перенаправление 307 POST должно быть хотя бы подтверждено пользователем. Увы, очевидно, что браузер не придерживается спецификации. IE просто повторяет запрос (поэтому он работает для ваших целей), но Firefox, Safari и Opera, похоже, отбрасывают данные POST. Следовательно, эта техника, к сожалению, ненадежна. - Используйте технику # 1 в сочетании со скрытыми полями формы, добавив один шаг между ними.
См. здесь список всех опций перенаправления HTTP: http://en.wikipedia.org/wiki/Http_status_codes#3xx_Redirection