heroku_WhateverOrigin –与Heroku和Play对抗原产地政策! 构架
heroku
不久前,在編寫(xiě) Bitcoin Pie時(shí) ,我發(fā)現(xiàn)有必要克服臭名昭著的Same Origin Policy ,該政策限制了運(yùn)行在客戶端瀏覽器上的javascript可以訪問(wèn)的域。 通過(guò)Stack Overflow,我找到了一個(gè)名為Any Origin的站點(diǎn),這基本上是無(wú)需設(shè)置專(zhuān)用服務(wù)器即可擊敗Same Origin Policy的最簡(jiǎn)單方法。一切都很好,直到大約一周前,Any Origin停止為某些(但不是全部)https請(qǐng)求工作。 碰巧的是,那段時(shí)間我在Play上獲得了一些經(jīng)驗(yàn)! 和Heroku,這使我能夠快速構(gòu)建名為Anyever Origin(.org!)的Any Origin的開(kāi)源克隆(在github上 )。 對(duì)于那些不熟悉Play的人! 和Heroku,讓我簡(jiǎn)單介紹一下:
Heroku是領(lǐng)先的PaaS提供商之一。 PaaS只是一種奇特的說(shuō)法:“讓我們來(lái)管理您的服務(wù)器,可伸縮性和安全性……您只是專(zhuān)注于編寫(xiě)應(yīng)用程序。” Heroku最初是一家Ruby商店,但現(xiàn)在支持多種編程語(yǔ)言和平臺(tái),包括python,java,scala,javascript / Node.Js。 它們最酷的一點(diǎn)是,它們提供了大量的插件 ,從簡(jiǎn)單的東西(如自定義域和日志記錄)到計(jì)劃,電子郵件,SMS,再到更強(qiáng)大的插件(如Redis , Neo4j和Memcached) 。
現(xiàn)在在應(yīng)用程序部分,我最近找到了Play! 框架 。 Play是一個(gè)Java / Scala框架,用于編寫(xiě)Web應(yīng)用程序,該框架借鑒了Ruby on Rails / Django的思想,即為您提供完整的預(yù)構(gòu)建解決方案,讓您專(zhuān)注于編寫(xiě)實(shí)際的業(yè)務(wù)邏輯,同時(shí)允許您以后自定義所有內(nèi)容。需要。 我鼓勵(lì)您在Play!主頁(yè)上觀看12分鐘的視頻,該視頻演示了如何從頭開(kāi)始實(shí)現(xiàn)強(qiáng)大的功能。 玩! 在Heroku中受本地支持,因此,要運(yùn)行生產(chǎn)應(yīng)用程序,實(shí)際上要做的就是:
- 新玩
- 編寫(xiě)一些業(yè)務(wù)邏輯(控制器/視圖/無(wú)關(guān))
- git init…git提交
- “ heroku應(yīng)用程序添加”以創(chuàng)建新應(yīng)用程序(別忘了添加“ –stack cedar”以使用最新一代的Cedar堆棧)
- “ git push heroku master”上傳您的應(yīng)用程序的新版本……它是自動(dòng)構(gòu)建和部署的。
有了這些工具(實(shí)際上只花了幾天的時(shí)間我就學(xué)會(huì)了),我著手構(gòu)建了Whatever Origin。 處理JSONP請(qǐng)求是一項(xiàng)受IO約束的任務(wù)-您的服務(wù)器基本上會(huì)執(zhí)行HTTP請(qǐng)求,并在完成后將響應(yīng)發(fā)送給使用javascript / JSON魔術(shù)包裝的客戶端。 幸運(yùn)的是Play!對(duì)Async IO的支持確實(shí)非常簡(jiǎn)單。 看看我的單個(gè)get方法 :
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// http://blog.altosresearch.com/supporting-the-jsonp-callback-protocol-with-jquery-and-java/if ( callback != null ) {response.contentType = "application/x-javascript";responseStr = callback + "(" + responseStr + ")";} else {response.contentType = "application/json";}renderJSON(responseStr);}}); }第一行啟動(dòng)對(duì)請(qǐng)求的URL的異步獲取,然后注冊(cè)到完成事件,并釋放線程。 您幾乎可以認(rèn)為這是Node.Js !
實(shí)際上,我花了最長(zhǎng)的時(shí)間進(jìn)行開(kāi)發(fā)和調(diào)試的是JSONP本身。 我發(fā)現(xiàn)的有關(guān)此信息以及jQuery的客戶端支持有些棘手,而且我花了幾個(gè)小時(shí)來(lái)處理過(guò)度逃逸的JSON和其他有趣的東西。 完成之后,我只是將其推到github,以每年僅7美元的價(jià)格注冊(cè)了whatorigin.org域,并用Bitcoin Pie代碼中的whatorigin.org替換了anyorigin.com,瞧,這個(gè)網(wǎng)站重新上線了。
我真的很喜歡在2011年開(kāi)發(fā)網(wǎng)站–整個(gè)行業(yè)都在致力于使個(gè)人/小型創(chuàng)業(yè)公司輕松開(kāi)發(fā)出令人贊嘆的產(chǎn)品。
參考: WhateverOrigin –與Heroku和Play對(duì)抗相同的原產(chǎn)地政策! 來(lái)自JCG合作伙伴 Ron Gross的A Quantum Immortal博客的框架
翻譯自: https://www.javacodegeeks.com/2012/01/whateverorigin-combat-same-origin.html
heroku
總結(jié)
以上是生活随笔為你收集整理的heroku_WhateverOrigin –与Heroku和Play对抗原产地政策! 构架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 适配器设计模式示例
- 下一篇: 看一下CDI 2.0 EDR1