JSONP原理
利用<script>
标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的 JSON 数据。JSONP请求一定需要对方的服务器做支持才可以。
限制
JSONP只支持GET请求,JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。
koa2代码:
router.get('/getData.jsonp', async ctx => {
// 获取jsonp的callback
let callbackName = ctx.query.callback || 'callback'
let returnData = {
success: true,
data: {
text: 'this is a jsonp api',
time: new Date().getTime(),
}
}
// jsonp的script字符串
let jsonpStr = `;${callbackName}(${JSON.stringify(returnData)})`
// 用text/javascript,让请求支持跨域获取
ctx.type = 'text/javascript'
// 输出jsonp字符串
ctx.body = jsonpStr
})
效果:
1.postman请求:
2.在其他网站进行跨域请求:
$.ajax({
url: 'http://localhost:3000/tagname/getData.jsonp',
type: 'GET',
dataType: 'JSONP',
success: function (res) {
console.log(res)
}
})