一切都很好,直到大约一周前,Any Origin停止为某些(但不是全部)https请求工作。 碰巧的是,那段时间我在Play上获得了一些经验! 和Heroku,这使我能够快速构建一个名为Anyever Origin(.org!)的Any Origin的开源克隆(在github上 )。 对于那些不熟悉Play的人! 和Heroku,让我简单介绍一下:
Heroku是领先的PaaS提供商之一。 PaaS只是一种奇特的说法,“让我们来管理您的服务器,可伸缩性和安全性……您只是专注于编写应用程序。” Heroku最初是一家Ruby商店,但现在支持多种编程语言和平台,包括python,java,scala,javascript / Node.Js。 它们最酷的一点是,它们提供了大量的插件 ,从简单的东西(如“自定义域”和“日志记录”到调度,电子邮件,SMS),再到更强大的插件(如Redis , Neo4j和Memcached) 。
现在在应用程序部分,我最近找到了Play! 框架 。 Play是一个Java / Scala框架,用于编写Web应用程序,该框架借鉴了Ruby on Rails / Django的思想,即为您提供完整的预构建解决方案,让您专注于编写实际的业务逻辑,同时允许您以后自定义所有内容需要。 我鼓励您在Play!的首页上观看12分钟的视频,该视频显示了如何从头开始实现强大的功能。 玩! 在Heroku中是本地支持的,因此,要使生产应用程序运行,实际上您需要做的就是:
- 新玩
- 编写一些业务逻辑(控制器/视图/无关)
- git init…git提交
- “ heroku应用程序添加”以创建新应用程序(不要忘记添加“ –stack cedar”以使用最新一代的Cedar堆栈)
- “ git push heroku master”上传您的应用程序的新版本……它是自动构建和部署的。
有了这些工具(实际上只花了几天的时间我就学会了),我着手构建了Whatever Origin。 处理JSONP请求是一项受IO约束的任务-您的服务器基本上会执行HTTP请求,并在完成后将响应发送给使用javascript / JSON魔术包装的客户端。 幸运的是Play!对Async IO的支持确实非常简单。 看看我的单个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);}});
}
第一行启动对请求的URL的异步获取,然后注册到完成事件,并释放线程。 您几乎可以认为这是Node.Js !
实际上,我花了最长的时间进行开发和调试的是JSONP本身。 我找到的有关该信息的信息以及jQuery的客户端支持都很难找到,而且我花了几个小时努力解决过度逃脱的JSON和其他有趣的东西。 完成此操作后,我只是将其推到github,以每年仅$ 7的价格注册了whatorigin.org域,并用Bitcoin Pie代码中的whatorigin.org替换了anyorigin.com,瞧,该网站重新上线了。
我真的很喜欢在2011年开发网站–整个行业都在致力于使个人/小型创业公司轻松开发出令人赞叹的产品。
参考: WhateverOrigin –与Heroku和Play对抗相同的原产地政策! 来自JCG合作伙伴 Ron Gross的A Quantum Immortal博客的框架
翻译自: https://www.javacodegeeks.com/2012/01/whateverorigin-combat-same-origin.html