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