考虑到安全问题,一个域名的js只能发起对自己的域名的请求,否则就是跨站的,这是不被允许的。但是,标签script内加载的脚本是不受此限制的。有人因此hack出JSONP,利用这一个特点即可发起跨站的脚本请求,并传递跨站数据给客户端。本文对此技术验证。
我们会创建两个node服务,分别为8081、8082两个端口,扮演当前站点和跨域站点。假设我从服务器A加载一个HTML文件,文件内通过脚本标签发起对跨域站点B的请求。B站希望返回数据{msg:1}给A站的客户端。
A站点。服务器文件home.js,提供静态首页服务
var express = require('express');
var app = express();
var path = require('path')
var public = path.join(__dirname, 'public')
app.use('/',express.static(public))
var server = app.listen(8081, function () {
console.log("home site started ")
})
B站点。提供JSONP服务。文件名为:cors.js
var express = require('express');
var app = express();
app.get('/jsonp/:callback',function (req, res) {
var callback = req.params.callback
console.log(callback)
res.end(callback+'({msg:1})');
})
var server = app.listen(8082, function () {
console.log("CORS Server started")
})
其首页index.html:
<script>
function cb(obj)
{
alert(obj.msg)
}
</script>
<script src="http://localhost:8082/jsonp/cb" ></script>
启动服务器
node home.js
node cors.js
访问localhost:81,看到一个对话框显示1。此时,B站返回的数据已经成功的传递给了A站的客户端。
完成。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。