MaratGilyazov
@MaratGilyazov

AJAX cross-domain POST файла из JS с хитрыми ограничениями — возможно?

Важные уточнения

1) нет доступа к коду на сервере, на который постим

2) нет общего наддомена, то есть связать нужно mysite.com и vk.com

3) нужно получить ответ

4) постить нужно файл (картинка)

5) нужна кросс-браузерность, решение «только для последних версий Firefox и Chrome» не подходит

6) запрос нужно выполнить средствами JavaScript'a («проксирование» запроса на нашем сервере — на крайний случай)



Собственно, задача

Находимся в IFrame, загруженном с нашего сервера 188.*.*.* на сайт vk.com, есть файл-картинка, скаченная с нашего сервера, есть урл типа «abc.vc.com/upload?...», вот по этому адресу нужно POST-запросом залить наш файл.





Что накопал сам

Весь день гуглил-копал, вот некоторые итоги (опираясь на «классификацию» отсюда habrahabr.ru/blogs/javascript/120336/):



1) postMessage — не кроссбраузерно

2) JSONP, динамическое создание тега script, jQueiry.ajax — это все только про GET-запросы

3) CORS — не вполне усвоил что это и как работает, но точно не кроссбраузерно

4) document.domain methods — работает только если есть общий наддомен, не подходит

5) window.name Transport — тоже не вполне понял суть метода, но картинку так не передать, похоже

6) Server-side proxy — пока это вроде бы единственный жизнеспособный вариант, но его осnавлю на крайний случай, если не найдется JS-решение

7) CRAZY IFRAME STUFF — весьма своеобразный хак, но опять же это кажется про GET-запрос, картинку не запостить

8) flash — в айфрейме у нас лежит флешка, запостить из нее нельзя, опять же, из-за политик безопасности — нашего домена нет в «abc.vc.com/crossdomain.xml».

9) easyXDM — не подходит, т.к. там нужен доступ к коду на обоих серверах



Есть метод примерно такой: создать скрытый айфрейм, сгенерить форму и сделать ее submit указав target'ом этот айфрейм — тут, как я понял, я не смогу посмотреть ответ опять же из-за разницы доменов. Или это тоже решение? Вот тут habrahabr.ru/blogs/development/110506/#habracut у автора ведь вроде та же задача?



В общем, пока я вижу только вариант с проксированием запроса у себя на сервере. Ну и зыбкая вера есть в скрытый айфрейм. Еще варианты есть или все же такие ограничения безопасности не просто так придуманы? =)



P.S. Учитывая специфику конкретной задачи (приложение вконтакте), возможен такой вариант — залить флешку на сервера vk.com (адрес будет какой-то такой: «xxx123.vc.com/qwerty.swf»), грузить ее в айфрейм оттуда и тогда при выполнении запроса, теоретически, все будет ок, т.к. в «abc.vc.com/crossdomain.xml» разрешены запросы с "*.vc.com" — тоже относительно жизнеспособный вариант, но не подходит из-за завязанности на особенности вконтакте, а эти наработки нужно будет еще использовать для других платформ.

  • Вопрос задан
  • 4580 просмотров
Пригласить эксперта
Ответы на вопрос 2
Nodge
@Nodge
Если бы не ограничение №1, то подошел бы способ через window.name transport(постить форму в iframe и парсить ответ в window.name).
Остальные способы Вам не подходят по требованиям. Увы, остается только проксирование через свой сервер.
Ответ написан
akzhan
@akzhan
не уверен, что подойдет, но гляньте — www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы