Как стать автором
Обновить

Комментарии 22

Оно бы да, но в FF3.6 это почему-то отключили. В 3.5 работало. Статья ejohn.org/blog/cross-site-xmlhttprequest/, в ней пример по ссылке «Demo». Он не работает не потому, что там что-то отключено, хотя может быть и так. Я проверял на своих серверах в FF3.6 — не работает. До FF3.5 существовал даже плагин FF, реализующий этот механизм.

Вот если бы в статье осветили именно эти подводные течения — почему отключили, что тестируют, когда включат? — то ценность статьи была бы намного выше.

Из фактов про FF ещё скажу, что Greasemonkey каким-то образом раскрывает кроссдоменность, и у неё GM_xttprequest() кроссдоменно работает. Значит, в браузере есть протокол? как его включить? Почему тогда не реализовали его в том полагине, который работает до версии 3.5? Самое интересное, что при запросе HTTPAnalyzer виден приход ответа с чужого домена со всей информацией по методу с Access-Control-Allow-Origin, но браузер его в себя не пропускает.
Ну, они написали в Release Notes, что спецификация часто меняется, и вместо того, чтобы каждый раз менять код, они лучше подождут более стабильной спецификации.
В 3.6.13 вчера тестировал, все прекрасно работало.
Вот, наверное, что работало и работает (FF, Хром, Safari; Опера и IE8 (Win7x64) — не): arunranga.com/examples/access-control/simpleXSInvocation.html (ссылка со страницы hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ под заголовком "“Simple” Requests using GET or POST". Для Post демо: arunranga.com/examples/access-control/preflightInvocation.html.

С особенностью: “Simple” requests don’t set custom headers, and the request body only uses plain text (namely, the text/plain Content-Type).

CORS, скорее всего, НЕ будет работать, именно он работал до 3.5, но проверить ещё раз сейчас не могу.

Так же работает в FF описанный ниже в той же статье метод с request.withCredentials = «true»; для передачи куков.

В общем, много интересного в современном состоянии XDR.
У Резига там просто пример с устаревшей версией протокола, поэтому и не работает. Вместо «Access-Control-Allow-Origin» там используется «Access-Control: allow». Запрет на кастомные хедеры — это логично, они хотят избежать потенциальных проблем с безопасностью, и поэтому не разрешают XDR отсылать ничего такого, что нельзя отослать с помощью обычной формы.
А опера не рассматривалась или не поддерживает?
Не поддерживает, политика безопасности…
Обычно использую связку
Аджакс на внутренний файл, а он уже отправляет через CURL то что мне нужно.

Конечно внутренний файл защищается.
Тут вместо IP юзера запрос придет с IP вашего сервера. Если кол-во запросов с IP ограничено, то будет плохо.
Оригинальный IP можно передать в качестве дополнительного заголовка, а вот второе просто так не вылечить.
nginx proxy вам в помощь.
Вспомнилось. Помоему отличное решение.
А CORS пока на мой взгляд слишком не безопасный.
достаточно внедрить скрипт куда-либо который с этого домена сделает запрос на нужный хакеру домен а тот уже зная что пришло сделает просто Access-Control-Allow-Origin такойже какой к нему пришёл Origin.
По-моему совершенно не безопасно.
Я конечно понимаю что с таким же успехом можно использовать jsonp для таких целей, но с добавлением CORS руки развяжут разработчикам сайтов и разработчикам троянов.
Если трактовать AJAX широко, не только как XMLHTTPRequest, вполне себе без ифреймов решается легко и элегантно через dom —
var objScript = document.createElement('script');
objScript.src =… // target url goes here

полный пример копи-паст выглядит так:

var headID = document.getElementsByTagName(«head»)[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://www.somedomain.com/somescript.js';
headID.appendChild(newScript);
Хорошее решение! JSONP решает! =)
а за что минусы? это лучше чем через PHP, делая +1 cURL запрос на каждый AJAX-запрос.

Я к cURL прибегаю только тогда, когда у меня нет доступа к серверной части при кроссдоменном запросе.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
На самом деле я чуть чуть ошибся, хотел дать линк на xdomain.js, но ошибся.
Поэтому дам ещё вот таких ссылок:
www.internet-technologies.ru/articles/article_1529.html
kobzarev.com/programming/cross-domain-ajax.html
bashtannik.wordpress.com/2010/03/11/jquery-ajax-crossdomain/
habrahabr.ru/blogs/ajax/67961/
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории