Статьи

WhwhatOrigin — Боритесь с единой политикой происхождения с Heroku и играйте!

Некоторое время назад, когда я кодировал Биткойн-пирог , я обнаружил необходимость преодолеть пресловутую Политику одного и того же происхождения, которая ограничивает доступ к javascript доменам, выполняемым в браузере клиента. С помощью переполнения стека я нашел сайт под названием Any Origin , который, по сути, является самым простым способом преодоления политики Same Origin Policy без настройки выделенного сервера.

Все было хорошо, пока около недели назад Any Origin перестала работать для некоторых (но не для всех) запросов https. Так уж получилось, что за это время я приобрел некоторый опыт работы с Play! и Heroku, которая позволила мне быстро создать клон с открытым исходным кодом Any Origin под названием Whither Origin (.org!) (на github ). Для тех, кто не знаком с Play! и Героку, позвольте мне дать краткое введение:

Heroku является одним из ведущих поставщиков PaaS . PaaS — это просто причудливый способ сказать: «Позвольте нам управлять вашими серверами, масштабируемостью и безопасностью… вы просто сосредоточены на написании приложения». Heroku начинал как магазин Ruby, но теперь он поддерживает различные языки программирования и платформы, включая python, java, scala, javascript / Node.Js. Что еще круче в них, так это то, что они предлагают огромный набор дополнений, начиная от простых вещей, таких как пользовательские домены и ведение журналов, по расписанию, по электронной почте, SMS и заканчивая более мощными дополнениями, такими как Redis , Neo4j и Memcached .

Теперь для части приложения, я недавно нашел Play! Рамки . Play — это инфраструктура Java / Scala для написания веб-приложений, основанная на идеях Ruby on Rails / Django, заключающихся в предоставлении вам готового готового решения, позволяющего сосредоточиться на написании реальной бизнес-логики и позволяющего настраивать все позже, если необходимо. Я призываю вас посмотреть 12-минутное видео на домашней странице Play !. Оно показывает, как добиться мощных возможностей буквально с нуля. Играть в! изначально поддерживается в Heroku, поэтому все, что вам нужно для запуска производственного приложения:

  • играть в новый
  • Напишите некоторую бизнес-логику (Контроллеры / Представления / еще много чего)
  • git init… git commit
  • «Heroku apps add» для создания нового приложения (не забудьте добавить «–stack cedar», чтобы использовать стек Cedar последнего поколения)
  • «Git push heroku master» для загрузки новой версии вашего приложения… оно автоматически создается и развертывается.

Вооружившись этими инструментами (на обучение которых у меня ушло всего несколько дней), я решил создать «Независимый источник». Обработка запросов JSONP — это задача, связанная с вводом-выводом: ваш сервер в основном выполняет HTTP-запрос, а по завершении он отправляет ответ вашему клиенту, завернутый в магию javascript / JSON. К счастью, Play! Поддержка Async IO действительно приятна и проста. Просто посмотрите на мой единственный метод get :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
public static void get(final String url, final String callback) {
    F.Promise<WS.HttpResponse> remoteCall = WS.url(url).getAsync();
  
    await(remoteCall, new F.Action<WS.HttpResponse>() {
        public void invoke(WS.HttpResponse result) {
            String responseStr = getResponseStr(result, url);   // code for getResponseStr() not included in this snippet to hide some ugly irrelevant details
  
            if ( callback != null ) {
                response.contentType = "application/x-javascript";
                responseStr = callback + "(" + responseStr + ")";
            } else {
                response.contentType = "application/json";
            }
  
            renderJSON(responseStr);
        }
    });
}

Первая строка инициирует асинхронную выборку запрошенного URL-адреса с последующей регистрацией в событии завершения и освобождением потока. Вы могли почти думать, что это Node.Js !

На самом деле на разработку и отладку у меня ушло больше всего времени — сам JSONP . Информацию, которую я нашел об этом, и о поддержке jQuery на стороне клиента было немного сложно найти, и я потратил несколько часов на борьбу с чрезмерно экранированным JSON и другими забавными вещами. После того, как это было сделано, я просто отправил его на github, зарегистрировал домен whatorigin.org за жалкие 7 долларов в год и заменил anyorigin.com на whatorigin.org в коде Bitcoin Pie, и вуаля — сайт вернулся в онлайн.

Мне очень нравится разрабатывать веб-сайты в 2011 году — есть целые отрасли, которые стремятся упростить для отдельных людей / небольших стартапов создание удивительных продуктов.

Справка: WhwhatOrigin — Боритесь с единой политикой происхождения с Heroku и играйте! Платформа от нашего партнера JCG Рона Гросса в блоге A Quantum Immortal