heroku_WhateverOrigin –与Heroku和Play对抗原产地政策! 构架

heroku

不久前,在编写 Bitcoin Pie时 ,我发现有必要克服臭名昭著的Same Origin Policy ,该政策限制了运行在客户端浏览器上的javascript可以访问的域。 通过Stack Overflow,我找到了一个名为Any Origin的站点,这基本上是无需设置专用服务器即可击败Same Origin Policy的最简单方法。

一切都很好,直到大约一周前,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

heroku

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python读取配置文件失败原因_python读取配置文件报keyerror-文件路径不正确导致的错误...

- 在其他模块使用反射读取配置文件报错&#xff0c;但是在反射模块中读取GetData.check_list又是正确的反射模块如下&#xff1a;# get_data.pyfrom API_AUTO.p2p_project_7.tools import project_pathimport pandas as pdfrom API_AUTO.p2p_project_7.tools.read_config impor…

备忘录设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

redis命令学习

清空所有flushall 转载于:https://www.cnblogs.com/dragkiss/p/5784814.html

打印机一直显示正在删除不掉怎么办?

1、停止打印服务&#xff0c;按WinR键打开运行对话框&#xff0c;然后输入“services.msc ” 打开任务管理。 找到“Print Spooler”&#xff0c;先停止该服务。 按WinR键打开运行对话框&#xff0c;然后输入“Spool” 回车打开“spool” 文件夹&#xff0c;打开“PRINTERS”文…

java 并发 面试_Java 并发基础常见面试题总结

1. 什么是线程和进程?1.1. 何为进程?进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的。系统运行一个程序即是一个进程从创建&#xff0c;运行到消亡的过程。在 Java 中&#xff0c;当我们启动 main 函数时其实就是启动了一个 JVM…

web性能测试基础 知识(引用)

1.1基本概念 并发用户&#xff1a;用户并发一般发生在使用比较频繁的模块中&#xff0c;而且遇到异常通常都是程序的问题。 用户并发数量&#xff1a;在线用户数量是计算并发用户数量的主要依据之一。使用系统的用户数量*(5%~20%) 并发主要针对WEB服务器而言&#xff0c;是否并…

javafx动画_JavaFX:创建Sprite动画

javafx动画到目前为止&#xff0c;尽管我的大多数文章都涉及JavaFX属性和绑定&#xff0c;但是今天我想写一讲我也致力于JavaFX运行时的另一部分&#xff1a;动画API。 在本文中&#xff0c;我将解释如何在JavaFX中编写自定义动画&#xff0c;以及如何使用这种方法为Sprite动画…

java自定义迭代器作用_Java实现的自定义迭代器功能示例

本文实例讲述了Java实现的自定义迭代器功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;编写自己的Iterator&#xff0c;实现Iterator接口&#xff0c;这里多说一句&#xff0c;实现Iterable后&#xff0c;可以用“foreach”循环遍历你的对象。import java.util.It…

FZU Problem 2238 Daxia Wzc's problem

Daxia在2016年5月期间去瑞士度蜜月,顺便拜访了Wzc,Wzc给他出了一个问题&#xff1a; Wzc给Daxia等差数列A(0),告诉Daxia首项a和公差d; 首先让Daxia求出数列A(0)前n项和,得到新数列A(1); 然后让Daxia求出数列A(1)前n项和,得到新数列A(2); 接着让Daxia求出数列A(2)前n项和,得到新…

生成器设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

java项目遇到的问题_java系列:项目中遇到的一些问题(持续更新中)

JSONArray去重的问题 JSONArray array = ["2","0","0","0","0","0"]; private String[] instanceAaary(JSONArray array) throws JSONException{String[] strs = new String[array.length()]; for (int i = 0; i …

【转】从 ArcGIS for Desktop 发布地图服务

原文链接&#xff1a;http://resources.arcgis.com/zh-CN/help/tutorials/01z300000007000000.htm 本教程的目的是将地图服务直接从 ArcGIS for Desktop 发布到 ArcGIS for Server 中。本教程与名为“在 ArcMap 中准备您的 Web 地图”的上一教程类似&#xff0c;需要使用 ArcGI…

Java tree set_Java TreeSet tailSet()方法

Java TreeSet tailSet()方法java.util.TreeSet.tailSet(E fromElement) 方法用于返回一组大于或等于指定元素的元素。1 语法public SortedSet tailSet(E fromElement)2 参数fromElement&#xff1a;这是返回集的最小边界值(包括该边界值)3 返回值返回此集合中元素大于或等于fro…

java map练习_JAVA Map练习

JAVA Map练习作者&#xff1a;萤火之森2015-04-21 12:46浏览&#xff1a;1203package pack3;import java.util.HashMap;import java.util.Iterator;import java.util.*;import java.util.Set;/*** 每一个学生都有对应的归属地* 学生Student 地址String* 学生属性&#xff1a;姓…

Objective-C 反射机制

该文章属于<简书 — 刘小壮>原创&#xff0c;特此感谢&#xff1a;<简书 — 刘小壮> http://www.jianshu.com/p/5bbde2480680 了解反射机制 Objective-C语言中的OC对象&#xff0c;都继承自NSObject类。这个类为我们提供了一些基础的方法和协议&#xff0c;我们可以…

java 模块化osgi_OSGi简介–模块化Java

java 模块化osgiOSGi联盟是这种搁浅的管理机构&#xff0c;它始于1999年。其最初目标是为网络设备创建开放搁浅。 基于此思想&#xff0c;此规范也针对Java引入。 Eclipse在Java中是第一个。 他们于2004年6月推出了基于OSGi的Eclipse IDE。 OSGi是在Java中定义动态模块的方法。…

java成绩查询_JavaWeb项目第三次总结_成绩查询的实现

查询图书的功能实现如何知道浏览器往服务器传入的参数1、在编写好查询页面后&#xff0c;使用火狐浏览器的friebug (全部—>POST—>参数)2、编写GradeListServlet&#xff0c;重写doGet()和doPOST()方法服务器处理页面请求的过程1、重写doPOST()方法。处理过程1、连接数据…

Train Problem I hdu 1022(栈)

http://acm.split.hdu.edu.cn/showproblem.php?pid1022 题意&#xff1a;给出火车的进站与出站顺序&#xff0c;判断是否可以按照给出的出站顺序出站。 #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <…

Spring数据和Redis

本文是我们学院课程的一部分&#xff0c;标题为Redis NoSQL键值存储 。 这是Redis的速成班。 您将学习如何安装Redis并启动服务器。 此外&#xff0c;您将在Redis命令行中乱七八糟。 接下来是更高级的主题&#xff0c;例如复制&#xff0c;分片和集群&#xff0c;同时还介绍了…

java的原生数据类型_Java中的8种原生数据类型(Primitive Data Types)分析

八种数据类型类型 int short long byte float double char boolean字节数 4 2 8 1 4 8 4 JVM相关大小 -2147483648~2147483647 -32768~32767 -9223372036854775808~9223372036854775807 -128~127 3.40282347E38F 1.79769313486231570E308tip:八种类型我是这样记忆的&#xff1a…