Хороший способ перенаправить с запросом POST?

Я должен перенаправить пользователя на внешний сайт хотя запрос POST.

Единственная опция, которую я выяснил, состоит в том, чтобы сделать это, отправляют форму через JavaScript.


Какие-либо идеи?

16
задан RadiantHex 9 April 2010 в 01:18
поделиться

4 ответа

Не совсем понятно, что вы имеете в виду, поэтому рассмотрим несколько сценариев:

  1. Пользователь должен отправить форму POST на сервер, отличный от вашего.

    Легко, просто укажите цель как действие формы:

     
  2. Пользователь должен быть перенаправлен после успешной отправки POST

    Легко, принимайте и обрабатывайте данные POST как обычно, затем ответьте заголовком перенаправления 302 или 303 .

  3. Пользователь должен отправить данные POST на ваш сервер, и после проверки вы хотите отправить эти данные на другой сервер.

    Немного сложно, но есть три варианта:

    • Ваш сервер принимает данные POST, и пока пользователь ждет response, вы устанавливаете соединение с другим сервером, отправляете данные 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

34
ответ дан 30 November 2019 в 16:18
поделиться

Javascript - единственный способ (сделать это автоматически). Вы просто не можете перенаправить запрос POST стандартными методами http . Вы уверены, что GET здесь не подходит?

2
ответ дан 30 November 2019 в 16:18
поделиться

Просто установите URL действия HTML-формы на конкретный внешний сайт.

Вот SSCCE, просто скопируйте, вставьте и запустите его:

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2604530</title>
    </head>
    <body>
        <form action="http://stackoverflow.com/questions/2604530/answer/submit" method="post">
            <textarea name="post-text"></textarea>
            <input type="submit" value="Post Your Answer">
        </form>
    </body>
</html>

Вы увидите, что Stackoverflow имеет хорошую CSRF-защиту ;)

5
ответ дан 30 November 2019 в 16:18
поделиться

Использование формы, вероятно, является вашим единственным вариантом в качестве ссылок, перенаправления HTTP и только заставит браузер загрузить другой URL-адрес с помощью метода GET .

Вам не обязательно использовать JavaScript для отправки формы. Если некоторое взаимодействие пользователя приемлемо, вы можете использовать форму с некоторыми полями и позволить пользователю нажать кнопку отправки.

Вы также можете убедиться, что страница, на которую вы перенаправляетесь, еще не принимает параметры GET. Некоторые сценарии без разбора принимают как GET, так и POST.

0
ответ дан 30 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: