Почему $ .post () подчиняется политике того же происхождения, но отправляет форму с методом = 'POST'? - PullRequest
16 голосов
/ 27 января 2012

Я работаю над веб-инструментом, который упрощает работу, которую мы выполняем в моем офисе.Инструменты, предоставленные нам нашим партнером, имеют общий логин, который использует весь наш этаж, но он отключается каждые 30 минут, что раздражает необходимость повторного входа в систему весь день.

То, что я сделал вВ прошлом в моем инструменте создавался скрытый iframe, который входил в него, отправляя скрытую форму при загрузке страницы, и продолжая отправлять форму каждые 30 минут, чтобы избежать тайм-аута.Затем они могут отправлять результаты поиска в инструмент партнера напрямую из моего инструмента (через другую, видимую форму).

Я хотел бы использовать jQuery $.post(), чтобы как избавиться от скрытого фрейма, так и сделать его такимединственный раз, когда он отправляет информацию для входа в систему, это когда выполняется поиск.Таким образом, он не будет постоянно отправлять запросы, когда он не используется, но вы все равно можете запустить поиск, не беспокоясь о времени ожидания входа в систему.

Казалось бы, политика того же источника ajax предотвращает это, поэтому нав тот момент, когда я просто открываю новое именованное окно, а затем отправляю две скрытые формы в целевом окне одну за другой.

Проблема в том, что если запрос на вход еще не завершен, поискзапрос не проходит, и они снова попадают на страницу входа.Если они закроют окно и начнут поиск снова, это будет работать, но это также раздражает, но не так сильно, как в исходной ситуации.

Так, кроме того факта, что вы действительно должны увидеть страницу открытой (если толькоэто скрытый iframe) В чем разница между отправкой параметров через $.post() и отправкой формы методом POST?Они выглядят одинаково в клопе.Можно ли как-то настроить обратный вызов при отправке формы, чтобы он ожидал завершения первого запроса, прежде чем запускать второй?

Ответы [ 3 ]

26 голосов
/ 27 января 2012

$. Post использует xmlhttprequest для отправки данных.Xhr ограничен в соответствии с политикой того же происхождения.Отправка прямого HTTP-запроса POST отсутствует.

19 голосов
/ 27 января 2012

При выполнении запроса POST в другой домен вы не сможете получить доступ к ответу с помощью JavaScript (даже если вы отправите форму в iframe).

Однако при использовании XHR у вас есть полный доступ к ответу, поэтому вы можете делать много плохих вещей - например, доступ к страницам, где пользователь вошел в систему, слежка в его корпоративной внутренней сети и т. д.

Таким образом, ограничения XHR заключаются не в том, чтобы избегать CSRF, а во избежание раскрытия конфиденциальной информации.

0 голосов
/ 27 января 2012

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

Вы можете решить это? Вы можете заменить форму отправки на jq, чтобы дождаться завершения состояния входа в систему, а затем отправить форму, однако я не уверен, что это хорошая идея - циклическое вращение обычно указывает на ошибку проектирования.

Какой контроль над кодом у вас есть? Можете ли вы сделать отправку, сделать логин, а по возвращении отправить поиск? Или сделать поиск не требующим логин?

...