云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

专属服务器_南开网站建设_

小七 141 0

条纹.js还有JSONP

我们最近发布了一个新版本的条纹.js,几乎每个条带事务背后的JavaScript库。这个库负责获取信用卡数据,提交给Stripe的服务器,然后返回一个可以收费的令牌。重写条纹.js带来了一系列新的改进条纹.js用户已经在后台自动升级。条纹.js的历史是一个有趣的例子,说明了web在实践中是如何工作的:技术被重新调整用途以适应意外的使用情况。我想说明一下这件事的结果会很有趣。帧最初,当我们在建造条纹.js,我们使用iframes实现了网络调用。当然,iframe从未打算用于跨域请求。然而,HTML5增加了对postMessage的支持,这使得两个协作的页面能够进行通信。但这还不够,IE6和往常一样不支持postMessage。事实证明,通过使用一个不明显的共享通道:iframe的src属性,特别是锚点片段,您仍然可以使iframe黑客工作。这是第一个版本的条纹.js做。它在优雅上的不足在兼容性上得到了弥补。不过,这意味着我们必须从api.stripe.com网站,有点不雅观。底层代码很粗糙,很难维护。CORS公司网络标准进展缓慢,但确实在进步。早在2005年,Tellme Networks的几个人写了一篇W3C工作组的说明,标题很吸引人,就是使用Processing Instruction 1.0,它为XML和HTTP引入了访问控制声明的概念。这些年来,它经历了几个版本(到2007年,它是跨站点请求的访问控制)。今天,这已成为CORS,或跨来源资源共享。支持CORS非常简单,只需添加几个HTTP报头。浏览器会自动给Ajax请求加上OPTIONS请求的前缀,验证CORS头是否存在并且有效,然后发送实际的请求。CORS已经开始被广泛采用:大多数主流浏览器现在都支持它,Amazon刚刚在S3中添加了CORS支持,而YouTube几个月前启用了CORS。随着JavaScript应用程序的兴起,很明显所有API现在都应该支持CORS:如果您提供的是httpapi,那么不支持web的主要语言就很奇怪了。因此,我们最近在Stripe的API中启用了CORS支持,现在任何人都可以向Stripe发出跨源请求。不幸的是,这还不够条纹.js. IE6和IE7都缺乏CORS支持,而IE8和IE9则破坏了实现。IE10是唯一一个没有错误CORS实现的版本。显然,兼容性对于条纹.js-我们希望支持所有主流浏览器,从IE6到其他地方。JSONP公司因此,我们回到了以意想不到的方式使用web技术:JSONP。JSONP是一个非常简洁的黑客,几乎可以在阳光下的每一个浏览器中工作。它涉及到创建一个标记,该标记加载API端点,然后返回一些封装在函数调用中的JSON。我们决定使用JSONP条纹.js重写。向我们的API添加支持需要几个步骤。首先,我们必须确保对带有回调查询参数的请求的任何响应都封装在JSONP回调中。接下来,我们必须确保JSONP响应始终返回一个200http状态代码,并且真正的状态代码出现在响应主体中。最后,由于JSONP只支持GET请求,但是我们的API使用了各种请求方法,所以我们必须使用一个_method查询参数来实现HTTP方法重写支持。我们没有把API代码搞得一团糟,而是将所有这些都作为API逻辑本身之上的中间件来实现。有了这个,我们重写了条纹.js并在我们支持的每一个浏览器中进行了大量的测试。优势那么,归根结底,这个新版本的优点是什么?首先,条纹.js现在大约是以前大小的一半,这为我们的用户节省了时间和带宽。当加载file://url时,它现在可以工作了,这是本地开发宿主经常抱怨的问题。在条带端,我们能够消除支持iframe隧道所需的大量复杂性和代码。总而言之,一个相当不错的重构工具。